Cocoa benkyoukai

263 views

Published on

Published in: Education, Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
263
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
2
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Cocoa benkyoukai

  1. 1. [iOS  bestPractice:ViewController                            with:TVArrayDataSource];
  2. 2. 何について発表?
  3. 3. High-qualityViewController ための一つの方法
  4. 4. iOSのViewControllerが 太っている イベントの処理 viewのコード tableviewなどのdelegate logicのコード
  5. 5. iOSのViewControllerが 太っている イベントの処理 viewのコード tableviewなどのdelegate logicのコード ファイルの分割
  6. 6. ViewControllerにTableViewのデータソースを // number of rows - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return [itemArray count]; } // cell for row - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *cellIdentifier = @"MYCELL"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier]; if (!cell) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier]; } // get item NSString *item = [itemArray objectAtIndex:indexPath.row]; // config cell [cell.textLabel setText:item]; return cell; } 書くことが多い
  7. 7. ViewControllerにTableViewのデータソースを // number of rows - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return [itemArray count]; } // cell for row - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *cellIdentifier = @"MYCELL"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier]; if (!cell) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier]; } // get item NSString *item = [itemArray objectAtIndex:indexPath.row]; // config cell [cell.textLabel setText:item]; return cell; } 書くことが多い
  8. 8. データソースを別のクラスに 置きましょう
  9. 9. ViewController 1 TVArrayDataSource ViewController 2 // number of rows - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return [itemArray count]; } // cell for row - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *cellIdentifier = @"MYCELL"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier: cellIdentifier]; if (!cell) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier]; } // get item id *item = [itemArray objectAtIndex:indexPath.row]; // config cell ..... perform block or selector ..... return cell; } // TVArrayDataSourceの初期化 ... // config cell [cell.textLabel setText:item]; @property (strong, nonatomic) NSArray *itemArray; // TVArrayDataSourceの初期化 ... // config cell [cell.imageView setImage:item];
  10. 10. セールの設定の方法 // define block TVCellConfigureBlock configureCell = ^(UITableViewCell *cell, NSString *name) { [cell.textLabel setText:name]; }; // create datasource and set configure block self.dataSource = [[TVArrayDataSource alloc] initWithItems:items cellIdentifier:@"MYCELL" cellConfigureBlock:configureCell]; // create datasource and set selector self.dataSource = [[TVArrayDataSource alloc] initWithItems:items cellIdentifier:@"MYCELL" target:self cellConfigureSel:@selector(configureCell:andItem:)]; - (void)configureCell:(UITableViewCell *)cell andItem:(NSString *)item { [cell.textLabel setText:item]; } block selector
  11. 11. TVArrayDataSource - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { // get cell UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:self.cellIdentifier]; if (!cell) { if (self.isCellFromXib) { NSArray *nib = [[NSBundle mainBundle] loadNibNamed:self.cellName owner:self options:nil]; cell = [nib objectAtIndex:0]; } else { cell = [[NSClassFromString(self.cellName) alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:self.cellIdentifier]; } } // get item id item = [self.items objectAtIndex:indexPath.row]; // configure cell if (self.isConfigByBlock) { self.configureBlock(cell, item); } else { objc_msgSend(self.target, self.configureSelector, cell, item); } return cell; }
  12. 12. ソースを見ましょう https://github.com/nghialv/TVDataSource

×