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
#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 |