1

我有根视图,它显示带有内容控制器的导航控制器,这就是它的样子: 在此处输入图像描述

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。

我该如何正确解决这个问题?

4

1 回答 1

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

 UINavigationController *destination = segue.destinationViewController;
UIViewController *vc = [[destination viewControllers] objectAtIndex:0];
vc.delegate = self;
}

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

于 2012-04-20T15:05:01.027 回答