0

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

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

该类myViewController具有应该在两者内部发生的事情-viewDidLoad-viewDidAppear:(BOOL)animated但是如果我在 UITabBarController 视图出现后立即点击我的按钮,那么这些方法似乎都没有被调用。甚至更奇怪的是,当我点击“返回”时,视图并没有消失,而是堆栈中它下面的视图只是弹回原位。

但是,如果我转到选项卡栏中的另一个选项卡,然后返回到第一个选项卡,然后再次点击我的按钮,我的自定义视图控制器动画进入,-viewDidAppear:(BOOL)animated被调用,并且它在点击“返回”时动画出视图应该。不幸的是,-viewDidLoad从未调用过。

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

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

编辑#2:这是我希望我的观点设置的方式:

  • UITabBar 控件
    • 选项卡 1:UINavigationController
      • UIViewController 被压入堆栈
        • UIViewController 被压入堆栈
        • 等(可能更多的 UIViewControllers)
    • 选项卡 2:UIViewController
    • 选项卡 3:UINavigation 控制器
      • UIViewController 被压入堆栈
        • UIViewController 被压入堆栈
4

1 回答 1

0

你没有说什么样的对象包含你发布的代码,但是,如果它正在处理一个按钮动作,它可能是一个由你的导航控制器管理的自定义视图控制器。如果这是真的,那么你会想要[self.navigationController pushViewController:myOtherView animated:YES];.

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

于 2012-09-13T23:28:52.287 回答