Iphone 调用viewDidLoad,VIEWWILLEXPEND未调用,视图未显示在屏幕上
更新 已经提到,根据文档,不会调用ViewWillDisplay和ViewDidDisplay。 但是,我在这些方法中不执行初始化,也不向视图中添加UI元素 我只是用它们来放置断点来调试它 还有其他想法吗Iphone 调用viewDidLoad,VIEWWILLEXPEND未调用,视图未显示在屏幕上,iphone,cocoa-touch,uikit,Iphone,Cocoa Touch,Uikit,更新 已经提到,根据文档,不会调用ViewWillDisplay和ViewDidDisplay。 但是,我在这些方法中不执行初始化,也不向视图中添加UI元素 我只是用它们来放置断点来调试它 还有其他想法吗 原始问题 我被难住了。我正在重构一些代码,遇到了一些奇怪的行为 我在没有nib的情况下初始化viewController A,并以编程方式设置视图 调用控制器A中的viewDidLoad 在viewController A的viewDidLoad中,我从nib初始化viewControlle
原始问题 我被难住了。我正在重构一些代码,遇到了一些奇怪的行为 我在没有nib的情况下初始化viewController A,并以编程方式设置视图 调用控制器A中的viewDidLoad 在viewController A的viewDidLoad中,我从nib初始化viewController B 我将viewControllerB.view添加为viewControllerA.view的子视图 调用控制器B的viewDidload
然后它变得很奇怪:
我检查过的东西: viewControllerBs Nib的名称正确 viewControllerB的视图出口连接到视图 viewControllerB及其视图均为非零 最重要的是,SDK[修订版]beta 5中的一切都非常好 有什么想法吗?
这一定很愚蠢。如果通过代码将视图控制器添加到视图层次结构中,视图控制器将不会获得
视图将出现(或视图显示)消息。如果您自己添加,您必须自己向视图控制器发送消息。试试看
-(void) viewDidAppear:(BOOL)animated {
// whatever
}
结束这件事:
我一直找不到解决方案,但从那时起,SDK3.0就成为了标准,这一点变得毫无意义。该代码在当前版本的SDK中工作正常。不要忘记调用
[super viewWillAppear:animated];
无论你在哪里重新定义它
文件说:
如果重写此方法,则必须在实现中的某个点调用super
我猜你的观点不是根观点。您可能正在使用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协议。所以这对sdk3有效,但对早期的sdk3无效?请参阅Ramin关于ViewWillapea的答案。它在文档中,但不容易找到。不确定为什么viewControllerB从未出现在屏幕上。你是否在ViewWillapea中进行了重要的初始化r?+1对于在此提问之前检查的内容列表否,我在viewDidLoad之外不执行初始化是的,它在3.0中可以工作,我继续通过编译3.0来完成我的常规编码,但我真的想在2.2.1中也进行编译。谢谢,这有助于我理解为什么不调用ViewWillIspes/DidIspes。然而,问题一直存在我使用带有导航控制器/viewcontrollers和ViewDidIsped的故事板ng打电话来…原因是我已经从我的自定义子类中注释掉了[super viewdide:animated],我的一个viewControllers继承自.Doh!不知道我最初为什么这样做(我认为是为了解决竞争条件)。取消注释解决了这个问题!感谢提醒!