UITableViewController не перерисовывает новую текстовую метку ячейки после popViewControllerAnimated - PullRequest
0 голосов
/ 03 февраля 2010

У меня есть проблема UITableViewController не удается перерисовать обновленную ячейку после удаления дочернего представления.

Вот что происходит. После изменения данных в дочернем представлении контроллер родительского представления перезагружает массив исходных данных и запускает [tableView reloadData] через PostNotification. После этого запуска я использую popViewControllerAnimated , чтобы вернуться к родительскому UITableViewController (это выталкивает дочернее представление из стека и раскрывает контроллер на один уровень вверх).

Однако мои обновленные данные не отображаются в родительском контроллере представления! Согласно отладчику, метка ячейки была обновлена, но видимая метка не изменилась. Однако, если я прокручиваю таблицу по экрану, мгновенно перемещая обновленную ячейку из поля зрения, когда она появляется снова, метка обновляется!

Я также пытаюсь вызвать [tableView reloadData] через viewWillAppear , но проблема все еще сохраняется.

Вот некоторая дополнительная информация, которая может оказаться полезной. У меня есть 3 представления, структурированные так:

1/  SettingsViewController : UITableViewController
2/  -- UserView : UITableViewController
3/  ---- UserDetailsView : UIViewController <UIActionSheetDelegate>

Я вызываю UserDetailsView изнутри UserView следующим образом:

 UserDetailsView *userDetailsView = [[UserDetailsView alloc] init];
 [self.navigationController pushViewController:userDetailsView animated:YES];

Если я вернусь к самому верхнему контроллеру (SettingsViewController), а затем загрузлю проблемный контроллер (UserView), все будет нарисовано правильно. Эта проблема возникает только при возврате из дочернего представления.

Заранее благодарю за ваши предложения.

1 Ответ

0 голосов
/ 03 февраля 2010

Наконец-то сработал примерно через час парного кодирования.

Через некоторое время мы заметили, что tableView всегда был нулевым всякий раз, когда мы отправляли сообщение reloadData. Как вы, возможно, знаете в Objective C, нулевые объекты принимают любое сообщение без жалоб.

Оказывается, что "кто-то" (хм, простите, это был я) определил эту строку в заголовочном файле.

 UITableView *tableView;

Теперь вы, умные куки, будете знать, что, поскольку мы расширяем UITaleViewController, нам не нужно указывать на tableView самим . Фактически я заменил унаследованный элемент tableView пустым объектом.

Тайна раскрыта. Надеюсь, это поможет кому-то еще! : D

...