当前位置: 首页 > 知识库问答 >
问题:

如何检查视图控制器是否以模块化方式呈现或在导航堆栈上推送?

呼延钱明
2023-03-14

在我的视图控制器代码中,我如何区分:

  • 模式呈现
  • 推式导航堆栈

在这两种情况下,都是YES,所以不是很有帮助。

使事情复杂化的是,我的父视图控制器有时是模态的,要检查的视图控制器被推送到模态的视图控制器上。

我的问题是,我将HtmlViewController嵌入到UINavigationController中,然后显示该控制器。这就是为什么我自己的尝试和下面的好答案都不起作用。

HtmlViewController*     termsViewController = [[HtmlViewController alloc] initWithDictionary:dictionary];
UINavigationController* modalViewController;

modalViewController = [[UINavigationController alloc] initWithRootViewController:termsViewController];
modalViewController.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
[self presentViewController:modalViewController
                   animated:YES
                 completion:nil];

我想我最好告诉我的视图控制器什么时候是模态,而不是试图确定。


共有3个答案

张瀚漠
2023-03-14

您忽略了一个方法:正在呈现

isBeingPresented在显示视图控制器时为true,在按下视图控制器时为false。

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];

    if ([self isBeingPresented]) {
        // being presented
    } else if ([self isMovingToParentViewController]) {
        // being pushed
    } else {
        // simply showing again because another VC was dismissed
    }
}
常元章
2023-03-14

迅速:

添加一个标志以测试它是否是类类型的模态:

// MARK: - UIViewController implementation

extension UIViewController {

    var isModal: Bool {

        let presentingIsModal = presentingViewController != nil
        let presentingIsNavigation = navigationController?.presentingViewController?.presentedViewController == navigationController
        let presentingIsTabBar = tabBarController?.presentingViewController is UITabBarController

        return presentingIsModal || presentingIsNavigation || presentingIsTabBar
    }
}
东云
2023-03-14

拿一粒盐,没有测试。

- (BOOL)isModal {
     if([self presentingViewController])
         return YES;
     if([[[self navigationController] presentingViewController] presentedViewController] == [self navigationController])
         return YES;
     if([[[self tabBarController] presentingViewController] isKindOfClass:[UITabBarController class]])
         return YES;

    return NO;
 }
 类似资料:
  • 问题内容: 在我的视图控制器代码中,我该如何区分: 模态呈现 推入导航堆栈 这两个和是在这两种情况下,所以都不是很有益的。 使事情变得复杂的是,我的父视图控制器有时是模态的,将要检查的视图控制器推到该模态上。 事实证明,我的问题是,我嵌入我的,然后呈现。这就是为什么我自己的尝试和下面的好答案无法正常工作的原因。 我想我最好告诉我的视图控制器何时是模态的,而不是试图确定。 问题答案: 拿一粒盐,没有

  • 问题内容: 题 如何仅使用按钮的touch up内部事件从一个视图控制器导航到另一个视图控制器? 更多信息 我在一个示例项目中尝试执行的步骤是: 创建示例单视图应用程序。 为用户界面(ViewController2)添加一个新文件->具有XIB的Objective-C类。 在ViewController.xib中添加一个按钮,并控制单击ViewController.h的按钮以创建内部补全事件。 转

  • 我有一个小型iPhone应用程序,它使用导航控制器显示3个视图(此处为全屏): 首先,它显示社交网络列表(Facebook、Google等): 然后它会显示一个OAuth对话框,要求提供凭据: 以及(之后,在相同的UIWebView中)权限: 最后,它显示带有用户详细信息的最后一个视图控制器(在真正的应用程序中,这将是菜单,可以在其中开始多人游戏): 这一切都很好,但我有一个问题,当用户想要返回并

  • 问题内容: 我正在使用此应用程序,我需要所有视图控制器,但一个需要纵向显示。我特别需要一个单一的视图控制器,使其能够旋转至手机所处的方向。 为此,我以模态形式呈现(未嵌入NavigationController中) 所以(例如)我的结构是这样的: 窗口-肖像 根视图控制器(UINavigationController-肖像) 家庭视图控制器(UIViewController-肖像) 详细信息视图控

  • 我需要一些关于react原生应用程序的社区建议。我是一个全新的人,不理解其中的一些基本区别。 关于反应本地文档创建StackNavigator的示例建议如下:从“反应导航堆栈”导入{createStackNav导航仪}; 我发现很多人使用下面的样式导入{堆栈导航器,Tab导航器}从“反应导航”; 为什么人们使用以上两种不同的风格?哪一个更合适,为什么? react-navigation-stack