[iOS/Three20] TTTableViewController 의 기본
TTTableViewController
는 UITableView와 UITableViewDelegate를 합쳐놓은 듯한 콘트롤러다.기본 작동 메커니즘은 UITableView와 거의 동일할 거라 생각된다. 하지만 이 중 UITableviewDelegate를 통해 데이터를 전달하는 프로토콜을 내부에서 구현하고 있기 때문에 프로그래머는 Table Cell을 만들어서 데이터 소스에 넣어주기만 하면 테이블을 구현할 수 있게 된다.
실제 구현은
TTTableViewController
를 상속받은 클래스에서 initWithNibName
을 구현하는 것으로 시작한다.- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { ... }
이 내부에서 데이터 소스를 바로 만들어 주면 화면에 뭔가 보인다.
...
너무 간단해!! 으악!! iOS SDK 만으로 테이블을 만들어 본 사람이라면 이 단순함을 알 수 있을 것이다.
TTCatalog의 테이블 샘플 중 하나인 TableImageTestController.m을 보면 그 예를 볼 수 있다.
- (TTTableImageItem*)itemForURL:(NSString*)URL { return [TTTableSubtitleItem itemWithText:@"text" subtitle:nil imageURL:URL defaultImage:TTIMAGE(@"bundle://기본사진.png") URL:nil accessoryURL:nil]; } - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) { self.dataSource = [TTListDataSource dataSourceWithObjects: [self itemForURL:@"http://어딘가의이미지1.jpg"], [self itemForURL:@"http://어딘가의이미지2.jpg"], // ... [self itemForURL:@"http://어딘가의이미지n.jpg"], nil]; } return self; } - (void)loadView { [super loadView]; self.tableView.rowHeight = 90; }
소스가 뚱뚱하고 길어서 몇 부분은 좀 편집했지만 거의 원형 그대로다. 그냥 initWithNibName에서 데이터소스에 해당하는 self.dataSource에 셀(TTTableSubtitleItem)을 넣어주는 것 만으로 테이블이 완성된다.
loadView
라는 부분도 있지만 그다지 주의해서 볼 만한 건 아닌 듯 하다.실제로 제대로 된 테이블을 만드려면 Data Source와 Model을 따로 구현하는게 좋다. 샘플의 TTTwitter라는 좋은 예제가 있으니 참고할 것.
댓글