iPhone在故事板中显示和取消导航视图控制器?

iPhone在故事板中显示和取消导航视图控制器?,iphone,uinavigationcontroller,presentmodalviewcontroller,uistoryboard,Iphone,Uinavigationcontroller,Presentmodalviewcontroller,Uistoryboard,我有一个根视图,它将导航控制器与内容控制器一起显示,如下所示: NavigationController以模式显示,ProjectTypeSelectionView是其根控制器。点击注销按钮时,我想关闭模式视图并返回LoginScreenViewController 因此,我在prepareSegue LoginScreen中设置为代理: - (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { UINa

我有一个根视图,它将导航控制器与内容控制器一起显示,如下所示:

NavigationController以模式显示,ProjectTypeSelectionView是其根控制器。点击注销按钮时,我想关闭模式视图并返回LoginScreenViewController

因此,我在prepareSegue LoginScreen中设置为代理:

- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {

 UINavigationController *destination = segue.destinationViewController;

 if ([[destination ] respondsToSelector:@selector(setDelegate:)]) {
     NSLog(@"%@", destination);
     [destination setValue:self forKey:@"delegate"];
}
}
然后在ProjectTypeViewController中添加以下方法:

 - (IBAction)logout:(id)sender {
      [self.delegate projectTypeSelectionViewControllerDidFinish];
 }
点击注销按钮时调用。令我惊讶的是,这并没有使控制器失效。什么都没有发生,即使你,一切都是相连的

我已经将错误追溯到了这一点——当prepareSegue被称为NavigationController时,控制器的delagate被设置为LoginScreenViewController,这是将ProjectTypeController的委托设置为LoginScreenViewController的插入部分

我如何正确地解决这个问题

- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {

 UINavigationController *destination = segue.destinationViewController;
UIViewController *vc = [[destination viewControllers] objectAtIndex:0];
vc.delegate = self;
}
要使此代码更加健壮,您可能需要检查DestinationViewController是否为UINavigationController

要使此代码更加健壮,您可能需要检查DestinationViewController是否为UINavigationController