3

У меня есть навигационный стек, состоящий из:Reference представления вида контроллера от модального (Objective-C)

UINavigationViewController 
-> WelcomeViewController 
-> RoleViewController 

Я хотел бы добавить модальное ViewController между Добром и ролью. Я добавляю ModalViewController через раскадровку и назначаю Segue (Present Modally) в ModalViewController с помощью кнопки в WelcomeViewController. Все хорошо, и модальные шоу прекрасно.

Теперь, когда я нахожусь внутри ModalViewController Я бы хотел (а) отменить modal и выполнить оригинальное segue от Welcome to Role. Я сделал несколько поисков в StackOverflow и пришел к разным соображениям о том, как это сделать. Логичным было изложено здесь: Dismissviewcontroller and perform segue

UIViewController *parentController = self.presentingViewController; 
[self dismissViewControllerAnimated:YES completion:^(void){ 
    [parentController performSegueWithIdentifier:@"segue_gotoRole" sender:self]; 
}];  

модальный уволен, но переходить не выполнено и приложение вылетает:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', 
reason: 'Receiver (<NavigationViewController: 0x78b96b80>) has no segue 
with identifier 'segueToRole'' 

Так self.presentingViewController нацелен на сокращение UINavigationViewController и не контроллер просмотра WelcomeViewController, который фактически представляет модальный. Чтобы преуспеть, мне нужно найти способ получить контроллер представления представления, который определен в раскадровке как создатель segue из модального.

Я пробовал много разных комбинаций, например. self.parentViewController, self.presentationViewController, я даже попытался перебрать стек навигации, чтобы выделить WelcomeViewController и настроить его специально как объект для выполнения segue, но ничего не работает.

Пожалуйста, помогите мне. :)

+0

Представляете ли вы свой контроллер просмотра от контроллера навигации или 'WelcomeViewController'? – ozgur

+0

Модаль выполняется при нажатии кнопки в WelcomeViewController (который встроен в NavigationViewController). –

ответ

1

Если бы это было, я бы написать delegate protocol здесь Modal VC что вы представить и сделать WelcomeViewControllerdelegate - После того, как его уволили, то WelcomeViewController может взять на себя и непосредственно перейти к RoleViewController?

0

Что я сделал, это отправить ссылку ведущего на представленный экземпляр.

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

Например,

@property (strong, nonatomic) PresentingClass *presenter; 

.

Затем в реализации класса Предъявление

presentedClass.presenter = self; 
[self presentViewController:presentedClass animated:YES completion:nil]; 

Наконец, в представленном осуществлении, просто вызовите

if(presenter){ 
    [presenter foo]; 
} 

Может помочь. Дай мне знать.

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