【问题标题】:Problem with "Presenting a controller modally within a nav controller within a tab bar controller"“在标签栏控制器内的导航控制器内以模态方式呈现控制器”的问题
【发布时间】:2011-05-18 06:25:01
【问题描述】:

我的应用有两种不同的模式。应用程序委托中有一个标签栏控制器。有两个选项卡,都使用子类视图控制器。这两个视图控制器基本上都包含一个导航控制器。导航控制器有它们的根视图控制器,通常在更改屏幕时,我只需推送和弹出相应导航控制器的控制器。这具有(正常)效果,即底部标签栏始终可见,一切都很好。

这一次我想以模态方式呈现一个屏幕,以便用户只能使用两个按钮确认或取消页面,即我想隐藏底部标签栏。这将是我认为以模态方式呈现视图的情况,但视图呈现在导航控制器边界内,因此底部标签栏仍然可见,这会导致应用程序导航混乱。我不确定模态呈现的视图怎么可能没有隐藏标签栏。这里的大多数问题似乎都有相反的问题(想要(不正确地)呈现模态视图并让标签栏保持可见)。

这些是我的尝试:

[self presentModalViewController:controller animated:YES]; // inside tab bar controller :-(
[self.tabBarController presentModalViewController:controller animated:YES]; // nothing is displayed. The new controller is instantly deallocated.
[self.navigationController presentModalViewController:controller animated:YES]; // inside tab bar controller :-(

调查一下,self.tabBarController 实际上是 nil。似乎没有返回标签栏控制器的链接...我想,要在标签栏顶部模态显示,我需要获得该标签栏控制器的链接?

【问题讨论】:

    标签: ios uitabbarcontroller modal-dialog


    【解决方案1】:

    我似乎找到了解决方案,但我不确定它是否符合规定,因为不知何故我无法使用视图控制器的 self.tabBarController 指针,在该指针中我启动视图控制器调用。

    我所做的是到达应用程序委托,该应用程序委托将标签栏控制器定义为公共属性。我可以使用该标签栏控制器属性以模态方式在屏幕上的所有内容上显示我的视图控制器。

    【讨论】:

    • 这是我发现的唯一方法。从那里您可以将子视图添加到窗口,而不是直接处理标签栏控制器,因为 [window addSubview:yourModalViewController.view];添加标签栏后发生的情况会将其放在前面。
    • 也许,我慢慢开始明白了。从上到下的角度来看,我的结构是:AppDelegate->TabBarController->ViewController->NavController->ViewController(+ViewControllers 以模态方式呈现)。这个结构的问题当然应该是,NavControllers 不应该被添加到普通的 ViewControllers,如第一段中所述developer.apple.com/library/ios/#featuredarticles/… 我想我应该将 NavBar 控制器添加到 Tab Bar 集。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-24
    • 1970-01-01
    • 2017-05-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多