Sve*_*ffe 16 iphone lifecycle uiviewcontroller
在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;
}
Run Code Online (Sandbox Code Playgroud)
NIB是使用Interface Builder创建的.导航控制器通过pushViewController推送相应的视图控制器对象.
意图行为是在文本字段中显示默认文本条目,以选择整个文本并将文本字段设置为第一响应者.[编辑:我注意到选择所有并做出第一响应者没有意义,因为选择会消失; 不过,我想知道为什么这些方法的行为如下所述.
但是,在调用方法viewDidLoad和viewWillAppear时,不会调用viewDidAppear方法.谁能告诉我为什么?我在网上找到的大多数问题和这里处理viewWillAppear/viewDidAppear都没有用; 我也明白,在子视图或以编程方式创建的视图中,这些方法不会被引发; 但是这不适用于案例,我也想知道为什么这些"生命周期"方法中的一个被引发而另一个没有.
任何的想法?谢谢!
小智 22
我有这个问题发生在我身上:viewWillAppear被召唤但viewDidAppear不是!
我终于弄清楚这是因为我有一个tabBarController地方,我自己超载了viewDidAppear,忘记了[super viewDidAppear:animated];
它VC在每个标签中都丢掉了!将该行添加回来为我的其他人修复它VC's.
希望这有助于某人!
除非您正在做一些自定义的事情,而您说您没有这样做,否则viewDidAppear:应该始终遵循对 的调用。viewWillAppear:我不知道为什么它不起作用,但这里有一些想法:
您是否在 的委托方法之一中做了一些奇怪的事情UITextFieldDelegate?它不太可能影响viewDidAppear:被呼叫,但它可能是罪魁祸首。
在推送视图之前,您是否已将大量内容加载到内存中?我不确定如果您在viewWillAppear:和之间收到内存警告会发生什么viewDidAppear:。
您尝试过进行清洁吗?有时这会有所帮助。
在这种情况下,当它应该起作用时,我通常会创建一个新类,并一次引入一个功能,看看是否可以让它以这种方式工作。我在一个新的基于导航的项目中尝试了您的代码,在该项目中我UIViewController在文本字段中添加了一个带有出口的新项目。然后我粘贴了问题中的代码,它确实按预期工作。
| 归档时间: |
|
| 查看次数: |
8913 次 |
| 最近记录: |