我有一个带有两个简单屏幕的应用程序。第一个屏幕始终打开第二个屏幕的相同实例。第二个屏幕有一个text field
和一个button
手动隐藏keyboard
。
resignFirstResponder
开机viewWillDisappear
不工作。
情况1:
- 单击主屏幕上的 openSearchButton。
- SearchViewController 已打开。
- 单击文本字段。
- 键盘变得可见。
- 单击返回按钮。
- 应用程序返回第一个屏幕。
- 单击主屏幕上的 openSearchButton。
- (iOS 10.2) 屏幕短时间全白。
- SearchViewController 已打开。
- 文本字段成为第一响应者并且键盘变得可见。
案例二:
- 单击主屏幕上的 openSearchButton。
- SearchViewController 已打开。
- 单击文本字段。
- 键盘变得可见。
- 单击隐藏键盘按钮
- 键盘变为隐藏。
- 单击返回按钮。
- 应用程序返回第一个屏幕。
- 单击主屏幕上的 openSearchButton。
- SearchViewController 已打开。
代码:
@implementation MainViewController
-(void) viewDidLoad {
[super viewDidLoad];
UIStoryboard *sb = [UIStoryboardWithName:@"Main" bundle:nil];
self.searchView = (SearchViewController*) [sb instantiateViewControllerWithIdentifier:@"searchView"];
}
- (IBAction)openSearchButtonClicked:(id)sender{
[self.navigationController pushViewController:self.searchView animated:YES];
}
@end
@implementation SearchViewController
- (void)viewWillDisappear:(BOOL)animated{
assert(self.searchTextField != nil);
[self.searchTextField resignFirstResponder];
[super viewWillDisappear:animated];
}
- (IBAction)hideKeyboardButtonClicked:(id)sender{
[self.searchTextField resignFirstResponder];
}
@end