从模态(objective-c)引用视图控制器

时间:2015-07-19 17:55:34

标签: ios objective-c uiviewcontroller uinavigationcontroller

我有一个由以下内容组成的导航堆栈:

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

我想在Welcome和Role之间添加一个模态viewcontroller。我通过故事板添加一个ModalViewController,并从WelcomeViewController中的一个按钮为ModalViewController分配一个segue(Present Modally)。这一切都很好,模态很好。

现在我在ModalViewController里面我想解除模态并从Welcome to Role执行原始的segue 。我在StackOverflow上做了一些搜索,并找到了如何做到这一点的不同看法。最符合逻辑的方法是: Dismissviewcontroller and perform segue

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

模态被解雇但是segue没有被执行而应用程序崩溃了:

<div class="content-panel" ng-init="init()">
    <div class="content-panel-title">
        <h2> Date : {{jalse.contentDate}}</h2>
    </div>
    <div>
        <h4>{{jalse.contentAbstract}}</h4>
        <div>
            {{jalse.contentText}}
        </div>
    </div>
</div>

因此self.presentingViewController以UINavigationViewController为目标,而不是实际呈现模态的视图控制器WelcomeViewController。 为了成功,我需要找到一种方法来将故事板中定义的呈现视图控制器作为模式中的segue创建者

我尝试了很多不同的组合,例如self.parentViewController,self.presentationViewController,我甚至试图遍历导航堆栈以单独输出WelcomeViewController并将其专门定位为执行segue的对象,但似乎没有任何工作。

请帮帮我。 :)

2 个答案:

答案 0 :(得分:1)

如果是我,我会在你delegate protocol中写一个Modal VC,并WelcomeViewController delegate - 一旦被解雇,WelcomeViewController {1}}可以接管并转移到RoleViewController

答案 1 :(得分:0)

我所做的是将演示者引用发送到呈现的实例。

这可以通过在所呈现的类中设置呈现类引用的属性来实现。

例如,

@property (strong, nonatomic) PresentingClass *presenter;

然后,在呈现类实现中

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

最后,在提出的实现中,只需调用

即可
if(presenter){
  [presenter foo];
}

可以提供帮助。让我知道。