Каков наилучший способ обновить UITableView в иерархии UINavigationController? - PullRequest
3 голосов
/ 18 апреля 2010

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

У меня есть пользовательский интерфейс, в котором сводная информация о записях отображается в таблице внутри контроллера навигации. Когда пользователь нажимает вспомогательную кнопку для строки, на навигационный контроллер помещается новое представление, открывающее представление, где пользователь может редактировать данные в соответствующей записи. После этого представление редактирования извлекается из стека навигационного контроллера, и пользователь возвращается в представление таблицы.

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

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

Мне кажется, что это нормальное занятие в iPhone-приложении.

Может ли кто-нибудь предложить наилучший практический подход к этому? Я чувствую, что что-то упустил.

Приветствия - Стив.

Ответы [ 2 ]

16 голосов
/ 18 апреля 2010

Поначалу стандартный подход может показаться слишком сложным, но он полезен для многих ситуаций.

В вашем классе табличного представления создайте метод, подобный:

-(void)editDone {
    [self.tableView reloadData];
}

Добавьте свойство в свой контроллер редактирования, например:

@property (assign) id delegate;

Установите делегата при нажатии на ваш аксессуар:

editController.delegate = self;

И когда редактирование завершится, вызовите ваш метод так:

[delegate performSelector:@selector(editDone) withObject:nil];

Вы можете создать аналогичные методы для обработки отмены вашего компонента редактирования или для отклонения модальных контроллеров редактирования и т. Д. Считается более классным поместить все это в протокол, если хотите.

13 голосов
/ 18 апреля 2010

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

  1. Сохранить indexPath выбранной ячейки.

  2. Реализация -[UIViewController viewWillAppear:] метода контроллера представления, который содержит UITableView. Если сохраненный indexPath не равен nil, перезагрузите указанные ячейки с помощью:

    -[UITableView reloadRowsAtIndexPaths:withRowAnimation:]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...