2017-01-19 3 views
0

Пропустить данные об увольнении для просмотра контроллера вне контроллера навигации?

Как показано на рисунке выше, у меня есть два контроллера вида, один из которых находится в навигационном контроллере. Когда в контроллере A нажата кнопка, контроллер B отображается через навигационный контроллер и отображается в виде модально. Возможно ли, чтобы я передал данные от контроллера B обратно контроллеру A, когда функция увольнения вызывается на B?

+0

модальный переход должен быть направлен от A к контроллеру навигации, читающему ваше описание. –

ответ

0

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

+0

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

+0

В этом случае самым простым способом является использование 'unind segue' –

+0

. И вы все еще можете используйте делегацию, например, в A: 'если пусть navigationController = segue.destination как? UINavigationController, let b = navigationController.viewControllers.first as? BViewController { b.delegate = self } '. И вызов метода делегата с данными перед увольнением B –

0

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

https://www.andrewcbancroft.com/2015/12/18/working-with-unwind-segues-programmatically-in-swift/

Этот стек Переполнение ответ имеет гораздо более подробную и ценную информацию по этой теме

Passing Data between View Controllers

0

Вы можете пройти через NSNotificationCentre.

Сначала нужно добавить уведомления наблюдателя и его селектор в ViewControllerA, как показано ниже:

[[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector(receiveTestNotification:) name:@"notificationName" 
               object:nil]; 

-(void) receiveTestNotification:(NSNotification*)notification 
{ 
    NSDictionary* userInfo = notification.userInfo; 
    NSLog (@"%@",userInfo); 
} 

Сейчас в ViewController B Вы должны опубликовать уведомление, как показано ниже:

NSDictionary* userInfo = your data ; 
NSNotificationCenter* nc = [NSNotificationCenter defaultCenter]; 
[nc postNotificationName:@"notificationName" object:self userInfo:userInfo]; 
Смежные вопросы