Ответ 1
вы можете сделать это в appDelegate....
- (void)applicationDidEnterBackground:(UIApplication *)application
{
[self.window endEditing:YES];
}
У меня есть UISearchBar, который при щелчке показывает клавиатуру. Однако, если пользователь нажимает кнопку "Дом", пока отображается клавиатура, а затем возвращается в приложение, клавиатура все еще видна. Как скрывать клавиатуру, когда приложение закрывает/вводит фон?
Я попробовал следующее в viewDidDisappear:
[eventSearchBar resignFirstResponder];
[eventSearchBar endEditing:YES];
Я также пробовал это в делегате в appDidEnterBackground:
[self.rootController.navigationController.view endEditing:YES];
Ни один из них не работал.
вы можете сделать это в appDelegate....
- (void)applicationDidEnterBackground:(UIApplication *)application
{
[self.window endEditing:YES];
}
Быстрая версия:
func applicationDidEnterBackground(application: UIApplication) {
window?.endEditing(true)
}
В вашем представлении контроллер, например, в методе init, зарегистрируется для UIApplicationWillResignActiveNotification
:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(willResignActive:)
name:UIApplicationWillResignActiveNotification
object:nil];
Когда приложение переходит в фоновый режим, сделайте контроллер отображения поиска неактивным. Это удаляет фокус из поля поиска и скрывает клавиатуру:
- (void)willResignActive:(NSNotification *)note
{
self.searchDisplayController.active = NO;
// Alternatively, if you only want to hide the keyboard:
// [self.searchDisplayController.searchBar resignFirstResponder];
}
И не забудьте удалить наблюдателя в методе dealloc:
[[NSNotificationCenter defaultCenter] removeObserver:self
name:UIApplicationWillResignActiveNotification
object:nil];
У меня все стандартные методы терпит неудачу на моей спорадически. Пока это единственный способ добиться твердых результатов.
В верхнем контроллере.
- (void)viewDidLoad {
[super viewDidLoad];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(willResignActiveNotification:) name:UIApplicationWillResignActiveNotification object:nil];
}
-(void) willResignActiveNotification:(NSNotification*) vNotification {
[[UIApplication sharedApplication] sendAction:@selector(resignFirstResponder) to:nil from:nil forEvent:nil];
[self setEditing:NO];
}
Существует нечетный случай, когда текстовое поле больше не будет отвечать на resignFirstResponder
или endEditing
, но все еще имеет клавиатуру вверх.
Решение в быстрой версии 3.2 Версия
override func viewDidLoad() {
super.viewDidLoad()
NotificationCenter.default.addObserver(self, selector: #selector(hideTextField), name: NSNotification.Name.UIApplicationWillResignActive, object: nil)
}
deinit {
NotificationCenter.default.removeObserver(self)
}
func hideTextField(){
eventSearchBar.endEditing(true)
}