【发布时间】:2014-06-02 09:30:24
【问题描述】:
我在将 UIViewController 推入 UINavigationController 时遇到了一个奇怪的问题。
CustomTableViewController 是 UITableViewController 的子类
CustomTableViewController* vc = [[CustomTableViewController alloc] initWithStyle:UITableViewStylePlain];
UINavigationController *navVC = [[UINavigationController alloc] initWithRootViewController:vc];
[self.view addSubview:navVC.view];
由于某种原因,导航控制器已加载并在屏幕上可见,但 viewDidLoad从未在 CustomTableViewController 上调用。
之后手动推送 VC 也不起作用(仍然没有加载vc 的视图)
[navVC pushViewController:vc animated:YES];
但是,以下方法DO在vc 上调用viewDidLoad:
[self.view addSubview:vc.view];[self presentViewController:navVC animated:YES completion:nil];[self presentViewController:vc animated:YES completion:nil];
所以我倾向于认为 View Controller 和 Navigation Controller 都没有问题。但是,我不知道为什么视图没有被加载。手动强制 [vc view] 将加载视图,但不会调用其他视图生命周期方法。
CustomTableViewController 也没有什么问题,因为使用UITableViewController 本身也不起作用。
有什么想法吗?
【问题讨论】:
-
为什么要添加 navVC 视图作为 self.view 的子视图?我认为您没有正确使用它。但是,是的,如果您正在做的事情是正确的(我认为不是),那么下面的@Bobj-C 答案将起作用。
-
我有一个带有一些动态添加的 ViewController 的 UITabBarController。每个 ViewController 都拥有一个(将来会是多个)动态表单,它可以是 UITableViewController(具有自己的逻辑)。这个 UITableViewController 使用 UINavigationController 来实现它背后的添加/编辑逻辑。
-
听起来您可能应该将您的
navVC放入您的UITabBarController上的viewControllers数组中 -
如果你想拥有来自标签栏控制器的导航控制器,那么你应该将它作为... UITabBarController - UINavigationController - ContentControllers。 Tab Bar 然后在 NavigationControllers 之间切换。
-
不是真的,因为以后可能我的VC的上半部分是带Navigation Controller的TableView,而下半部分是另外一种表单类型。
标签: ios objective-c uiviewcontroller