UITabBarController的UINavigationController类型的第一个视图表现不正常

时间:2012-09-13 23:07:24

标签: iphone objective-c xcode

所以我在我的应用程序中有一个UITabBarController作为视图,其中第一个选项卡是UINavigationController。我在这个视图中有一个按钮,可以将另一个自定义视图推送到堆栈中:

myViewController *vc = [[myViewController alloc] init];
[self pushViewController:myOtherView animated:YES];

myViewController包含应该在-viewDidLoad-viewDidAppear:(BOOL)animated内部发生的事情,但是如果我在UITabBarController视图出现后立即按下我的按钮,那么这两种方法都不会出现被称为。甚至更奇怪的是,当我点击“Back”时,视图没有动画,而是堆栈下方的视图弹回原位。

但是,如果我转到标签栏中的另一个标签页,然后返回第一个标签页,然后再次点按我的按钮,我的自定义视图控制器会动画,-viewDidAppear:(BOOL)animated被调用,并且它会动画显示按照“应该”的方式击中“后退”。不幸的是,永远不会调用-viewDidLoad

我真的试图摆脱使用Interface Builder的一切;我想纯粹以编程方式创建这个视图控制器,但这些奇怪的问题并没有帮助。有谁能想到这种奇怪行为的原因?

编辑:即使我通过IB创建我的视图控制器,仍会出现此行为。这是怎么回事?我是否需要对UITabBarController做些什么?

编辑#2:以下是我希望我的观点投注设置的方式:

  • UITabBarControler
    • 选项卡1:UINavigationController
      • 将UIViewController压入堆栈
        • 将UIViewController压入堆栈
        • 等(可能更多UIViewControllers)
    • 标签2:UIViewController
    • 选项卡3:UINavigation控制器
      • 将UIViewController压入堆栈
        • 将UIViewController压入堆栈

1 个答案:

答案 0 :(得分:0)

您没有说出哪种对象包含您发布的代码,但是,如果它处理按钮操作,则可能是由导航控制器管理的自定义视图控制器。如果这是真的,那么你需要[self.navigationController pushViewController:myOtherView animated:YES];

(如果self是其他类型的对象或self.navigationController为nil,那么您需要添加有关当前视图控制器结构的更多详细信息。)