在UIViewController子类中,我有以下方法:
-(void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
// do something
myTextField.text = @"Default";
}
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
// do something
[myTextField selectAll:self];
[myTextField becomeFirstResponder];
}
- (void)viewDidLoad {
[super viewDidLoad];
// do something
myTextField.delegate = self;
}
NIB是使用Interface Builder创建的 . 导航控制器通过pushViewController推送相应的视图控制器对象 .
意图行为是在文本字段中显示默认文本条目,以选择整个文本并将文本字段设置为第一响应者 . [编辑:我注意到选择所有并做出第一响应者没有意义,因为选择会消失;不过,我想知道为什么这些方法的行为如下所述 .
但是, while methods viewDidLoad and viewWillAppear are called, the method viewDidAppear is not called. 任何人都可以告诉我为什么?我在网上找到的大多数问题和这里处理viewWillAppear / viewDidAppear都没有用;我也明白,在子视图或以编程方式创建的视图中,这些方法不会被引发;但这不适用于案例,我也想知道为什么这些方法中的一个被引发而另一个没有 .
任何的想法?谢谢!
4 回答
我有这个问题发生在我身上:
viewWillAppear
被召唤但viewDidAppear
没有!我终于弄清楚这是因为我有一个
tabBarController
我在那里重载了它自己的viewDidAppear
而忘记了[super viewDidAppear:animated];
它在每个标签中都丢掉了每个
VC
!将该行添加回来为我的其他VC's
修复它 .希望这有助于某人!
对
viewDidAppear:
的调用应该始终遵循viewWillAppear:
,除非你做了一些自定义的事情,你说你不知道为什么它不起作用但是这里有一些想法:可能是你在
UITextFieldDelegate
的一个委托方法中做了一些奇怪的事情?它不太可能影响viewDidAppear:
被召唤,但它可能是罪魁祸首 .在推送视图之前,您是否已将大量内容加载到内存中?如果你在
viewWillAppear:
和viewDidAppear:
之间收到内存警告,我不确定会发生什么 .你试过干净吗?有时这可以帮助 .
在它应该工作的情况下,我通常会创建一个新类,并在此时引入一个功能,看看我是否能以这种方式工作 . 我在一个新的基于导航的项目中尝试了你的代码,我在文本字段中添加了一个带有插座的新
UIViewController
. 然后我粘贴了问题中的代码,它按预期工作 .我有同样的问题 .
我复制/粘贴了
viewDidAppear
以创建viewWillAppear
但忘记更改super.viewDidAppear()
电话 . 这似乎阻止被召唤.1460591_ .这听起来像是你错过的代码中的某个地方或搞乱了对超类的调用 .
这可能是因为您在
viewDidLoad
或viewWillAppear
中向父VC添加了子视图控制器 . 孩子的外表阻止了对viewDidAppear
的调用 .这是一个疯狂的事情,我只知道,因为这是我的代码中的一个错误 . 我的意思是将子VC添加到此VC,而不是父VC .