2014-12-17 4 views
1

Я реализовал метод CellForRowAtIndexPath в моем проекте, который работает.CellForRowAtIndexPath в проекте нибы

Это выглядит следующим образом:

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


    static NSString *cellIdentifier = @"StackTableViewCell"; 

    Target *target = [self.fetchedResultController objectAtIndexPath:indexPath]; 

    StackTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier]; 

    if (!cell) 
    { 
     NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"StackTableViewCell" owner:self options:nil]; 
     cell = [topLevelObjects objectAtIndex:0]; 
    } 

    cell.cellLabel.text = target.body; 

    cell.cellLabel.font = [UIFont fontWithName:@"Candara-Bold" size:20];[UIFont fontWithName:@"Candara-Bold" size:20]; 

    // Configure the cell... 

    return cell; 
} 

но есть кое-что беспокоит меня, и это то, что я действительно не понимаю, что произошло в этой части (я взял его из какого-то учебника):

if (!cell) 
     { 
      NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"StackTableViewCell" owner:self options:nil]; 
      cell = [topLevelObjects objectAtIndex:0]; 
     } 

Может кто-нибудь, пожалуйста, помогите мне понять это?

спасибо!

+0

Прочтите ли вы соответствующий раздел «Руководства по программированию таблиц для iOS»? – rmaddy

+0

Какой раздел я должен прочитать? – JohnBigs

+1

Попробуйте https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/TableView_iPhone/CreateConfigureTableView/CreateConfigureTableView.html#//apple_ref/doc/uid/TP40007451-CH6-SW10 и https: // разработчик. apple.com/library/ios/documentation/UserExperience/Conceptual/TableView_iPhone/TableViewCells/TableViewCells.html#//apple_ref/doc/uid/TP40007451-CH7-SW1 – rmaddy

ответ

2

Если в представлении таблицы нет ячейки, доступной для повторного использования, загрузите объекты, которые существуют в StackTableViewCell.xib. Предположим, что первый найденный вами, определенный на верхнем уровне, может быть создан как тип ячейки, которую вы хотите.

+0

Хороший ответ. (Голосов) –

0
if (!cell) 
     { 
      NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"StackTableViewCell" owner:self options:nil]; 
      cell = [topLevelObjects objectAtIndex:0]; 
     } 

Вы пытаетесь загрузить ячейку из ниба, когда ячейка равна нулю.

Обычно я делаю так:

в ViewDidLoad

[self.tableView registerNib:[UINib nibWithNibName:@"StackTableViewCell" bundle:nil] forCellReuseIdentifier:cellIdentifier]; 

так в Tableview: метод cellForRowAtIndexPath вы можете получить ячейку и вам не нужно будет проверить, если это ноль или нет, потому что это будет всегда возвратная ячейка

StackTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];