posted by 프띠버리 2013. 9. 11. 06:54

 

 

ViewController.h


#import <UIKit/UIKit.h>

@interface ViewController : UIViewController<UITextFieldDelegate, UITableViewDelegate, UITableViewDataSource, UIWebViewDelegate>

{

    // 텍스트 필드 변수 선언

    IBOutlet UITextField *contextTextField;

    // 테이블용 변수 선언

    IBOutlet UITableView *table;

    // 유동성 배열 변수 선언

    NSMutableArray *data;

    // url저장할 문자열 변수 선언

    NSString *urlStr;

}

// 웹뷰용 변수 선언

@property (weak, nonatomic) IBOutlet UIWebView *webView;

 

// 테이블에 셀의 내용 추가할 메소드
- (IBAction)addItem:(id)sender;

// 테이블 수정 모드로 전환할때 메소드

- (IBAction)toggleEditMode:(id)sender;



@end



ViewController.m

#import "ViewController.h"


@interface ViewController ()


@end


@implementation ViewController

// 섹션구분을 위해 CELL_ID란 이름을 정의

#define CELL_ID @"CELL_ID"

 

// 테이블의 섹션 개수

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView

{

    // 섹션 개수는 1개

    return 1;

}

 

// 테이블 섹션의 셀 개수

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

{

    // 셀 개수는 data라는 배열안의 개수 만큼 표시

    return [data count];

}

 

// 테이블의 내용이 있는 셀을 선택했을때
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

{

    // urlStr이라는 문자열 변수에 현재 선택한 셀의 텍스트를 저장한다.

    urlStr = [data objectAtIndex:indexPath.row];

    NSLog(@"%@", urlStr);

    // url형식을 가지는 변수에 urlStr의 내용을 넣어서 웹뷰에서 쓸수 있게 한다.

    NSURL *url = [NSURL URLWithString:urlStr];

    // 웹뷰의 URL에 url변수의 주소를 집어 넣음

    NSURLRequest *requestURL = [NSURLRequest requestWithURL:url];

    // 웹뷰에 현재 url이 가리키는 주소의 웹페이지를 화면에 보여준다.

    [self.webView loadRequest:requestURL];

    

}

 

// 테이블 셀 안에 내용 집어넣기

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

{

    // cell은 CELL_ID라는 이름을 가지는 테이블 셀형식이다.

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CELL_ID];

    // 표시할 내용을 가진 셀이 없으면

    if(nil == cell)

    {

        // cell은 CELL_ID라는 이름을 가진 기본 형태의 셀로 초기화됨

        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CELL_ID];

    }

    // 각 셀의 텍스는 data라는 배열안의 내용을 넣어준다. 

    cell.textLabel.text = [data objectAtIndex:indexPath.row];

    // 셀을 반환하여 각 셀이 내용을 가지게 된다.

    return cell;

}


// 수정

- (void)tableView:(UITableView *)tableview commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath

{

    // 테이블이 수정(셀 지우기) 모드일때

    if(editingStyle == UITableViewCellEditingStyleDelete)

    {

        // data배열에서 현재 선택된 셀의 내용을 지움

        [data removeObjectAtIndex:indexPath.row];

        // 테이블 다시 보여주기

        [table reloadData];

    }

}


// 이동

- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath

{

    // 셀이 하나 지워지면 위치를 이동한다.

    return YES;

}


// 이동 -> 데이터 적용(좀더 이해가 필요함)

- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath

{

    // 오브젝트형 obj변수에 data 배열의 현재 선택된 부분 저장

    NSObject *obj = [data objectAtIndex:sourceIndexPath.row];

    // data 배열에서 현재 선택된 부분 삭제

    [data removeObjectAtIndex:sourceIndexPath.row];

    // data 배열에 obj에 저장된 내용을 삽입

    [data insertObject:obj atIndex:destinationIndexPath.row];

    NSLog(@"data : %@", data);

}


// 키보드

- (BOOL)textFieldShouldReturn:(UITextField *)textField

{

    // 기본적으로 프로그램이 실행되면 포커스는 텍스트 필드에 맞춰짐

    [textField resignFirstResponder];

    // additem메소드 호출

    [self addItem:nil];

    // 키패드 자동으로 내려가기

    return YES;

}


- (void)viewDidLoad

{

    [super viewDidLoad];

// Do any additional setup after loading the view, typically from a nib.

    // 웹뷰 델리게이트

    self.webView.delegate = self;

    // 텍스트필드 델리게이트

    contextTextField.delegate = self;

    // data를 유동형 배열로 초기화

    data = [[NSMutableArray alloc] init];

}


// 데이터 추가

- (IBAction)addItem:(id)sender

{

    // 문자열 변수 inputStr은 현재 입력된 텍스트 필드의 내용을 저장한다.

    NSString *inputStr = contextTextField.text;

    // inputStr 문자열의 길이가 0 보다 클때만(즉, 하나의 내용이라도 들어가 있을때만)

    if([inputStr length] > 0)

    {

        // data 배열에 현재 택스트 필드에 입력했던 내용을 추가

        [data addObject:inputStr];

        // 테이블 다시보여주기

        [table reloadData];

        // 텍스프 필드 공란으로 초기화

        contextTextField.text = @"";

    }

}


// 편집/완료 상태 토글식 동작

- (IBAction)toggleEditMode:(id)sender

{

    // 테이블이 수정모드면 비수정 상태로

    table.editing = !table.editing;

    // 버튼의 제목은 수정모드일때 Done를 표시 아니면 Edit를 표시

    ((UIBarButtonItem *)sender).title = table.editing ? @"Done" : @"Edit";

}


- (void)didReceiveMemoryWarning

{

    [super didReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

}


@end




 

'Programing > IOS' 카테고리의 다른 글

뷰티 오브 코리아 앱 소스  (0) 2013.09.16
테이블 셀 커스텀 디자인  (0) 2013.09.13
카드 짝 맞추기 게임  (0) 2013.08.29
Slider 및 TextField 및 OnOff 스위치 연습  (0) 2013.08.26
TableView 연습 코딩  (0) 2013.08.26