2013-02-13 3 views
2

Я делаю приложение с примерами с помощью раскадровки, чтобы иметь вид с UITableView с UITableViewCell, который осуществляет навигацию к другому UIView.Использование alloc и init при использовании UITableViewCell из раскадровки

Так что нужно закодировать, чтобы заполнить ячейку на виде таблицы.

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *cellIdentifier = @"SampleCell"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier]; 

    if (cell == nil) { 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellIdentifier]; 
     NSLog(@"cai no init da cell"); 
    } 

    GPItem *item = [self.items objectAtIndex:indexPath.row]; 

    cell.textLabel.text = @"Post"; 
    cell.detailTextLabel.text = item.imageURL; 

    return cell; 
} 

я понял, что код if (cell == nil) { ... никогда не выполняет, так что я на самом деле нужно сделать, что использует ячейку из раскадровки?

Спасибо.

+1

'UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier: cellIdentifier];' это делает ячейку не ноль – nsgulliver

ответ

5

Вы верны; этот код гарантированно вернет ячейку non-nil, если вы используете раскадровку. Кроме того, в iOS 6 новый вызов dequeueReusableCellWithIdentifier:forIndexPath:никогда не возвращается. Смотрите обсуждение в моей книге:

http://www.apeth.com/iOSBook/ch21.html#_registering_a_cell_class

+0

Спасибо человеку. Итак, и что вы думаете об использовании раскадровки? Должен использовать или нет? – Greg

+1

Иногда я использую раскадровки, но я также знаю, как сгенерировать мой интерфейс и мои контроллеры представлений в коде или использовать старые файлы nib. Раскалывания велики, пока вы их понимаете. Они не волшебство. Вы все еще должны знать, что происходит на самом деле. Опять же, см. Мою книгу: http://www.apeth.com/iOSBook/ch19.html#_storyboards – matt

0

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

+0

Это не совсем правильно. Пользовательский подкласс UITableViewCell все еще может быть прототипом ячейки из раскадровки, поэтому он никогда не будет ник. – matt

+0

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

+0

Спасибо большое. Теперь это яснее в моем сознании :) – Greg

0

Нету вам не нужен, что код при использовании ячейки, достигнутую в раскадровке.

Возможно, лучше всего удалить этот код, чтобы вы сработали славным и ранним, если identifier вы передали ячейке в построителе интерфейса и идентификатор, который вы используете в коде, когда-либо дрейфе. Этот фрагмент маскирует эту ошибку и предоставляет только ячейку, которую вы, скорее всего, не собирались делать.

Смежные вопросы