0

视图控制器可以通过 pushViewController 或 presentModalViewController 从超级视图控制器获得。在这个视图控制器中,我应该如何知道控制器来自哪条路?我需要它来关闭视图——

if (presentModalViewController ) {
        [self dismissModalViewControllerAnimated:YES];
    }else{
        [self.navigationController popViewControllerAnimated:YES];
    }

谢谢

4

3 回答 3

2

如果视图不在导航控制器中(例如因为它被呈现),self.navigationController 将为 nil。当然,如果您展示并拥有导航控制器,则需要更深入地挖掘。

此外,如果您没有出现,“self.presentingViewController”可能为零。

注意 iOS 的一个常见习惯用法是创建一个简单的协议来处理关闭视图。推送/呈现的视图是委托并调用其“viewWantsToClose”目标。如果你创建一个新的 Utility 项目,你会明白我在说什么。这就是 Apple 关闭“信息”视图的方式。您可能会让您的视图接受“doCloseAction”的块。

于 2013-02-03T20:26:23.510 回答
0

您负责推送或呈现视图,因此您应该知道何时弹出或关闭视图。如果您仍然需要执行这种检查,您可以从子视图中验证是否self.navigationController为 nil

于 2013-02-03T20:24:32.777 回答
0

你可以做:

if (self.navigationController == nil) {
      //[self dismissModalViewControllerAnimated:YES]; //Deprecated in iOS 6.0
      [self dismissViewControllerAnimated:YES completion:nil];
}else{
    [self.navigationController popViewControllerAnimated:YES];
}

或者

NSArray* views = [self.navigationController viewControllers];
if (self.navigationController == nil || self == [views objectAtIndex:0])
{
   //In the root view of navigationController or a presented View.
   [self dismissViewControllerAnimated:YES completion:nil];
}else{
   [self.navigationController popViewControllerAnimated:YES];
}
于 2013-02-03T22:03:57.020 回答