У меня есть приложение с двумя простыми экранами. На первом экране всегда открывается один и тот же экземпляр второго экрана. На втором экране есть text field
и button
, чтобы вручную скрыть keyboard
.iOS UITextField resignFirstResponder on viewWillDisappear
resignFirstResponder
viewWillDisappear
не работает.
Случай 1:
- Нажмите openSearchButton на главном экране.
- Открыт SearchViewController.
- Нажмите текстовое поле.
- Клавиатура становится видимой.
- Нажмите кнопку «Назад».
- Приложение возвращается к первому экрану.
- Нажмите на кнопку OpenSearchButton на главном экране.
- (iOS 10.2) Экран полностью белый на короткое время.
- Открыт SearchViewController.
- Текстовое поле становится первым ответчиком, и клавиатура становится видимой.
Случай 2:
- Нажмите openSearchButton на главном экране.
- Открыт SearchViewController.
- Нажмите текстовое поле.
- Клавиатура становится видимой.
- Щелкните hideKeyboardButton
- Клавиатура скрывается.
- Нажмите кнопку «Назад».
- Приложение возвращается к первому экрану.
- Нажмите на кнопку 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
Try [self.view endEditing: true]; – ChanWarde
@ChanWarde Это тоже не работает. – fthdgn
Является ли ваша (IBAction) hideKeyboardButtonClicked работоспособной? – ChanWarde