0

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

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

EDIT:

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

+0

Привет, Джон, вы используете CoreData для управления вашими данными? Пожалуйста, напишите несколько подробностей о вашей реализации, чтобы мы могли помочь. – Rog

ответ

0

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

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

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

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

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

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

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

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

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

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

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

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

+0

В итоге я напрямую обратился к базе данных, но я тестировал, и этот способ работает ... –

0

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

0

Все UIViewControllers имеют метод navigationController. Когда вы нажимаете контроллер вида на контроллер навигации, это свойство настроено на навигационный контроллер.

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

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

0

При нажатии на строку Вы перейдете к новому представлению с соответствующей информацией.

Здесь вы выполняете некоторые операции, такие как редактирование данных. Так сначала сохраните изменения по щелчку на кнопке сохранения (путем вызова IBAction) и в этом IBAction метод проверки Wheter (изменения успешно сохранены) затем вызвать

[self.navigationController popViewControllerAnimated: YES];

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

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