Вопрос

Вроде простой вопрос.У меня есть представление таблицы в навигационном контроллере.Когда я касаюсь ячейки, она передает контроллеру представления информацию из ячейки, поэтому я могу редактировать ее в новом представлении.Теперь это работает правильно (мы можем назвать это информационным путем:«rootviewcontroller -> pushviewcontroller»).Но когда я нажимаю «Сохранить» в новом представлении, я хочу, чтобы отредактированные значения вернулись в rootviewcontroller, прежде чем я вызову popviewcontroller (informationpath:«pushed viewcontroller -> rootviewcontroller»), чтобы отредактированные значения могли отображаться в представлении таблицы.

Каков правильный подход к этому?

РЕДАКТИРОВАТЬ:

pushViewController и popViewController работают.Я только спросил, как лучше всего вернуть отредактированную информацию в rootViewController для отображения в представлении таблицы при вызове кнопки «Сохранить» (popViewController).Думаю, мне просто нужно будет отредактировать pList с новой информацией непосредственно из нажатого viewController.Хотя я бы предпочел отправить новую информацию в rootViewController и позволить ему обрабатывать доступ к файлу pList.

Это было полезно?

Решение

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

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

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

В то же время я также добавил контроллер списка в качестве наблюдателя за событиями изменения основных данных, например:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(dataSaved:) name:NSManagedObjectContextDidSaveNotification object:nil];

Таким образом, если представление таблицы подробностей и контроллер обновят запись, контроллер списка получит ее. dataSaved: вызывается метод, передавая объект NSNotification.

в dataSaved: Я проверяю объект и, если редактируемый основной объект данных находится в обновленном списке, я устанавливаю флаг, сигнализирующий о необходимости обновления.Однако если во вставленном списке есть запись, это означает, что новая запись была создана и вставлена ​​в базу данных, поэтому устанавливается флаг, инициирующий полную перезагрузку представления таблицы списка.

Когда пользователь возвращается к контроллеру представления списка, viewDidAppear: метод срабатывает.В этом методе я проверяю флаги и либо вызываю

- (void)reloadRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation

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

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

Я не знаю, рекомендуется ли это делать, но пока у меня это работает.

Другие советы

Вы можете попробовать перезагрузку перед PopviewController, но вы должны опубликовать какой-нибудь код.

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

Итак, просто позвоните [self.navigationController popViewControllerAnimated:YES]; В контроллере представления.

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

При нажатии на ряд вы собираетесь на новый вид с соответствующей информацией.

Здесь вы выполняете некоторые операции, такие как данные редактирования. Поэтому сначала сохраните изменения на кнопке «Сохранить» (путем вызова IBACTION), и в этом методе IBACTION проверит Wheet (изменения успешно сохранены), а затем вызовите

Self.navigatingController popviewcontrollerranimated: да];

И убедитесь, что таблица перезагрузится при обновлении баз данных (для этого изменения данных данных, вызывая метод базы данных в методе ViewWillAppear).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top