UITableView перезагрузить вид ячеек

Как перезагрузить всю таблицу? В -tableView:cellForRowAtIndexPath: я сравниваю данные онлайн с данными на устройстве пользователя, и если они не совпадают, я показываю кнопку для загрузки контента. После действий, связанных с этой кнопкой, я хотел бы обновить всю таблицу, чтобы снова сравнить содержимое онлайн с локальным.

reloadData действительно обновляет значения, но не удаляет эти кнопки. Я хотел бы изменить способ отображения ячеек.

Другими словами, я хочу, чтобы это условие (в -tableView:cellForRowAtIndexPath:) работало, а оно не работает:

    if (![[NSFileManager defaultManager] fileExistsAtPath:someDir isDirectory:nil]) {   
        UIButton *bt = [UIButton buttonWithType:UIButtonTypeRoundedRect];
        (...)
        [cell addSubview:bt];
    }

Чтобы обновить таблицу, мне нужно открыть контроллер представления и снова нажать на него. Я хотел бы сделать это с помощью кнопки на navBar.

Заранее спасибо.


person yosh    schedule 01.04.2011    source источник
comment
Если вы используете пользовательскую UITableViewCell, убедитесь, что вы реализуете метод подготовки ячейки к повторному использованию, это проблема с dequeueReusableCellWithIdentifier. Ячейкам с кнопкой нужен свой идентификатор.   -  person Accatyyc    schedule 01.04.2011


Ответы (1)


Это потому, что вы кэшируете ячейки с помощью dequeueReusableCellWithIdentifier. Проверьте документы. Вы должны кэшировать 2 типа ячеек, с кнопкой и без нее.

person unexpectedvalue    schedule 01.04.2011
comment
Короче говоря, вместо того, чтобы добавлять кнопку или нет, я должен выбрать, какой из двух типов ячеек должен отображаться? - person yosh; 01.04.2011
comment
Да, передайте другой идентификатор в dequeueReusableCellWithIdentifier в зависимости от того, какую ячейку вы хотите. И создать один с кнопкой и один без. - person unexpectedvalue; 01.04.2011