2013-07-01 3 views
1

Моя цель - отобразить список ячеек, которые заполнены некоторыми данными, которые я сбрасываю с сервера. И когда пользователь прокручивается вниз, я бы хотел, чтобы вкратце была ячейка таблицы, в которой говорилось «Загрузка большего», а затем исчезает, когда все ячейки заполняются данными.dequeueReusableCellWithIdentifier вызывает пустую ячейку таблицы

Вот соответствующие разделы, чтобы сделать это:

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

    [tableView registerClass:[CGSitesCell class] forCellReuseIdentifier:cellIdentifier]; 
    // Option 1: CGSitesCell *cell = [[CGSitesCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellIdentifier]; 
    // Option 2: CGSitesCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier forIndexPath:indexPath]; 
    //(Still Option 2): 
    //if(cell == nil){ 
    //  cell = [[CGSitesCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellIdentifier]; 
    } 
    if(backupsArray.count !=0){ 
     //if we not on the last row 
     if (indexPath.row < backupsArray.count) { 
      [cell.textLabel setText:someData]; 
     }else{ 
     UITableViewCell *cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault 
                reuseIdentifier:cellIdentifier]; 
     [cell.textLabel setText:@"Load More"]; 
     return cell; 
     } 
    return cell; 
} 

Вот это то, что меня в тупик: Вариант 1 работает. Я вижу данные, которые хочу увидеть, и Load More внизу. Однако вариант 2 не работает! Я вижу данные, но я вижу только ячейку таблицы BLANK. Зачем?

Спасибо!

+0

Использование раскадровки? Вы указали идентификатор ячейки прототипа? –

+0

Не уверен, соответствует ли ваш код всем указанным выше комментариям, особенно упущение инициализации вашей инициализации cellIdentifier. Для варианта 2 вы можете попробовать (CGSitesCell *) [tableView dequeueReusableCellWithIdentifier: cellIdentifier] вместо [tableView dequeueReusableCellWithIdentifier: cellIdentifier forIndexPath: indexPath], который предназначен для iOS 6.0 и выше. Просто гадать, потому что я не знаю, на какой iOS вы тестируете. – Rick

+0

@verbumdei no раскадровка. – user678392

ответ

0

Я сделал это, сделав «Загрузить больше» в качестве UIView и установив его как нижний колонтитул UITableView вместо того, чтобы сделать его ячейкой таблицы, а затем только сделать его видимым, когда будет отображаться последняя строка таблицы, используя

`- (недействительными) Tableview: (UITableView *) Tableview willDisplayCell: (UITableViewCell *) клеток forRowAtIndexPath: (NSIndexPath *) indexPath { , если (indexPath.row == [число backupsArray] - 1) {

 //load more records here 

    } 

}

Мне также пришлось установить переменную экземпляра BOOL, чтобы отслеживать, когда я загружаю больше, потому что этот метод вызывается несколько раз, когда последняя ячейка видна, и я не хочу повторно загружать больше записей.

+0

Спасибо! Но одна из причин, по которой я задал свой вопрос, заключалась в том, чтобы выяснить, что происходит с моим кодом, независимо от того, есть ли другой способ, даже лучше, делать что-то. – user678392

1

Я пришел крест свой вопрос и не знаете, если вы обнаружили проблему, но если пользовательские ячейки построен с Interface Builder, то вы должны зарегистрировать Nib, а не класс:

[self.tableView registerNib:[UINib nibWithNibName:@"CGSitesCell" bundle:nil] forCellReuseIdentifier:@"CGSitesCellIdentifier"]; 

И пожалуйста, сделайте это в ViewDidLoad, а не в cellForRowAtIndexPath, который вызывается для всех ваших ячеек :-)

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