iPhone / UIViewController: при навигации от вида, что является лучшим способом обработки ввода данных - PullRequest
0 голосов
/ 21 июля 2010

Я должен знать это сейчас, но я все еще немного сбит с толку.Когда мое приложение перемещается от одного контроллера представления к другому (через контроллер навигации), я хочу «завершить» данные для текущего VC перед переходом к следующему VC.Единственный способ перехвата «подкачки страниц» - переход [old view viewWillDisappear] -> [newView viewWillAppear].Это кажется странным, хотя я думаю, что это работает хорошо.

Это действительно правильный способ обработки переходов?Мое приложение представляет собой набор венчурных капиталистов, которые совместно создают файл базы данных.Каждый VC имеет дело с различным аспектом данных.

Ответы [ 2 ]

0 голосов
/ 21 июля 2010

Что конкретно входит в «финализирующую» часть?Я предполагаю, что вы сохраняете какое-то состояние в контроллере представления для различных полей, а затем хотите записать это в файл базы данных перед переходом к следующему представлению?

Когда дело доходит до «редактирования контроллеров представления», я нахожуХороший способ сделать это - сделать так, чтобы контроллер представления непосредственно записывал в простой объект модели, который вводится через свойство, прежде чем передать его в контроллер nav.

Так что-то вроде:

/* Somewhere in the app delegate, like application:didFinishLaunching */
DatabaseFileModel *model = ...;

viewController1.model = model;
viewController2.model = model;

/* ... */

[self.window makeKeyAndVisible];

Затем каждый контроллер представления выполняет запись в эту модель, устанавливая свойства и т. Д., Когда текстовое поле завершает редактирование или что-то еще.Наличие контроллера представления для прямой записи в объект означает, что вам не нужно обрабатывать viewWillDisappear и т. Д.

Если вам все еще нужно это сделать, вы можете добавить делегат в контроллер навигации и обработать эти два метода:

– navigationController:willShowViewController:animated:
– navigationController:didShowViewController:animated:

Для получения дополнительной информации см. Документацию UINavigationControllerDelegate .

Это позволит вам хранить логику в одном месте, а не распределять ее в каждом контроллере представления.

0 голосов
/ 21 июля 2010

Я не знаю ваших точных настроек, так что это может быть вам не полезно, но у меня есть хороший опыт сохранения данных в -(void)textFieldDidEndEditing:(UITextField*)tf с использованием tf.tag для индексации полей. Оттуда я передаю данные в класс хранения и не беспокоюсь о том, что происходит в пользовательском интерфейсе.

...