更新
有人提到,不会根据文档调用viewWillAppear和viewDidAppear。 但是,我在这些方法中不执行初始化,也没有向视图添加UI元素。
我只是用它们来设置断点以尝试调试它。
还有其他想法吗?
原始问题
我很难过。我正在重构一些代码并且遇到了一些奇怪的行为......
我在没有nib的情况下初始化viewController A并以编程方式设置视图。
控制器A中的viewDidLoad被调用。
在viewController A的viewDidLoad中,我从一个nib初始化viewController B.
我将viewControllerB.view添加为viewControllerA.view
的子视图控制器B的viewDidload被调用。
然后它变得奇怪:
viewWillAppear和viewDidAppear viewController B 从不获取 调用。
viewControllerB.view 从不制作 它在屏幕上。
否错误。
我检查过的事情:
viewControllerBs Nib的名称是正确的。
viewControllerB的视图出口连接到视图。
viewControllerB及其视图都是非零的。
最重要的是,SDK [编辑]测试版5中的一切都很棒!
有什么想法吗? 它必须是愚蠢的......
答案 0 :(得分:21)
如果视图控制器通过代码添加到视图层次结构中,则视图控制器将不会获得viewWillAppear
(或viewDidAppear
)消息。如果您自己添加它,则必须自己向视图控制器发送消息。
答案 1 :(得分:3)
不要忘记致电
[super viewWillAppear:animated];
无论你在哪里重新定义它。
文档说:
如果覆盖此方法,则必须在实施中的某个时刻调用super。
答案 2 :(得分:1)
尝试
-(void) viewDidAppear:(BOOL)animated {
// whatever
}
答案 3 :(得分:0)
关闭此事:
我永远找不到解决方案,但从那以后SDK 3.0就是标准,而且这一点已经没有实际意义了。代码在SDK的当前版本中可以正常工作。
答案 4 :(得分:0)
我猜您的观点不是根视图。您可能正在使用UINavigationController,因此请尝试实现此方法
- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated
或者这个
- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated
并添加到viewDidLoad
this.navController.delegate = self;
(不要忘记在.h文件中添加UINavigationControllerDelegate协议。