首页 文章

如何知道控制器是presentModalViewController还是pushViewController?

提问于
浏览
0

视图控制器可以通过pushViewController或presentModalViewController从超级视图控制器获得 . 在这个视图控制器中,我应该如何知道控制器的方向?我需要它来关闭视图 -

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

谢谢

3 回答

  • 0

    如果视图不在导航控制器中,则self.navigationController将为nil(例如,因为它已呈现) . 当然,如果你出现并拥有一个导航控制器,你需要深入挖掘 .

    另外,如果你没有出现,“self.presentingViewController”可能是零 .

    注意iOS的一个常见习惯是创建一个简单的协议来处理关闭视图 . 推送/呈现的视图是委托,并获取其“viewWantsToClose”目标 . 如果您创建一个新的Utility项目,您将看到我在说什么 . 这就是Apple翻转“信息”视图的方式 . 您可以让视图接受“doCloseAction”的块 .

  • 0

    您负责推送或显示视图,以便您知道何时弹出或关闭视图 . 如果仍需执行此类检查,则可以从子视图验证 self.navigationController 是否为零

  • 2

    你可以做:

    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];
    }
    

相关问题