Как перейти к одному и тому же ViewController через несколько переходов из одного и того же TableViewController

У меня есть статический TableViewController с двумя статическими ячейками: аэропорт отправления и аэропорт прибытия. Оба переходят к другому TableViewController, который позволяет пользователю выбирать аэропорт и определяет исходный TVC как делегат для передачи объекта обратно. Чего я не знаю, как сделать, так это определить, какое свойство устанавливается при выборе аэропорта; аэропорт отправления или прибытия, когда выбор передается обратно через делегата. То, что я начал реализовывать, — это свойство в AirportListTVC, которое устанавливается с помощью метода prepareForSegue, а затем передается обратно делегату, когда сделан выбор. Есть ли способ лучше?


person Russ    schedule 20.07.2012    source источник


Ответы (1)


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

1) Используйте переходы построителя интерфейса и используйте prepareForSegue для передачи любой информации, которая у вас есть, в новый UIViewController.

2) Назовите UIViewController в построителе интерфейсов (идентификатор), а затем представьте его самостоятельно, используя instantiateViewControllerWithIdentifier, следующим образом — используя в этом случае контроллер навигации для представления:

UIStoryboard *storyboard = [viewController storyboard];
MyViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"MyVC"];
[vc configureWithMyData:myData];
[navigationController pushViewController:vc animated:YES];

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

Здесь есть некоторые вещи, которые следует учитывать - например, эти два метода заставляют новый UIViewController быть фактически инициализированным/viewDidLoad в разных точках (я могу расширить это, если это поможет).

person ChrisH    schedule 21.07.2012
comment
Спасибо за ответ. На самом деле у меня нет проблем с переходом и настройкой свойств. Чего я не могу понять, так это того, как определить, какой переход был выполнен от Master к Detail TVC, чтобы, когда Detail TVC передает выбранное значение обратно в Master, я знал, какое свойство установить. Я использую CoreData и делюсь контекстом управляемого объекта, если это помогает мне по-другому взглянуть на то, как это сделать. Прямо сейчас я устанавливаю свойство в Detail TVC, поэтому я знаю, какой переход был выполнен, и передаю его обратно вместе со значением, выбранным в Detail TVC. - person Russ; 21.07.2012
comment
Используете ли вы шаблон проектирования MVC? Подробный TVC обновляет модель, закрывается, а затем Master VC извлекает обновленную информацию из модели, когда она снова появляется. Если вы говорите о двух битах информации, вы, вероятно, могли бы просто обновить представление... - person ChrisH; 21.07.2012
comment
Я использую шаблон проектирования MVC. На MasterTVC я создаю объект в MOC. Затем я перехожу к DetailTVC, и этот DetailTVC указывает Master TVC в качестве своего делегата для передачи выбранного объекта, чтобы его можно было сохранить в MOC. Должен ли я передавать указатель на объект, созданный в MasterTVC, в DetailTVC и вносить обновления в модель непосредственно из DetailTVC? - person Russ; 21.07.2012
comment
Трудно сказать из этого, но это звучит лучше. - person ChrisH; 21.07.2012