在一个UIViewController中包含UITabBarController = viewDidAppear:没有被调用

3

我首先展示一个登录界面。然后用户登录后,我加载了一个包含UITabBarController的ViewController。问题在于,tabBarController中的任何单个viewControllers都不会调用viewDidAppear:方法。

我有一种感觉,这不是最佳的编程实践,所以请问有人有什么想法来改进我的代码结构或解决我的问题吗?


这看起来很不错,您能否在控制选项卡栏的视图控制器中发布您使用的代码? - Chance Hudson
你是如何将选项卡控制器“嵌入”视图控制器中的? - tc.
4个回答

3
我猜你的问题可能来自于错误使用UIViewController和UITabBarController。
UITabBarController用作多个视图控制器的容器。它本身可能不应该被包含在其他控制器中。它旨在位于视图控制器层次结构的顶部。因此,第一步可能是重新排列应用程序,使UITabBarController不再处于任何其他控制器之下,看看是否能解决问题。
在此之后,slev的方法似乎是正确的,即呈现登录视图。

在iOS5中,应该有API支持自定义UI视图控制器,使其可以作为诸如UITabBarController之类的东西的容器。 - pulkitsinghal
抱歉,这是不正确的。UITabBarController 可以被嵌套。只需确保如果你覆盖了它自己的方法,请调用 [super viewWillAppear]。 - Teddy

3

我遇到了一个问题,因为我正在子类化UITabBarController,在其中重写了viewDidAppear方法,但是没有调用[super viewDidAppear:...]。

在调用这个方法之后,viewDidAppear也被调用于子视图控制器中。


我也遇到了同样的问题 - 我猜在方法中总是将 [super viewDidSomething] 放在第一行被视为最佳实践,然后再在下面添加您的代码?因此,省略基础调用可能会在调用层次结构中弄错某些东西 - 是否有人愿意发表评论? - Miros

2
为什么不制作一个基于TabBarController的应用程序,然后在应用程序启动时立即调用模态屏幕(用于登录)?完成登录后,只需关闭它以允许TabBarController成为关键窗口。

有没有可能帮我解决这个问题?https://dev59.com/KFjUa4cB1Zd3GeqPT7UL - Legolas
@Legolas。是的,伙计,当然可以。我之前看过它,认为其他人已经给出了正确的答案,但不知道它会给你带来异常错误。 - justin
我基本上有两个PickerView。1个是DatePickerView,另一个是有3个组件的PickerView。点击textField会出现它们。我使用 [textField resignFirstResponder] 来取消选中它们。这适用于DatePickerView,而对于另一个pickerview则会抛出错误。 - Legolas

0
你可以尝试手动调用子视图控制器的viewDidAppear方法:当在根视图控制器上调用时,也手动调用子视图控制器的方法。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接