IPhone: Скрыть клавиатуру на приложении, введя фон или изображение, исчезли

У меня есть UISearchBar, который при щелчке показывает клавиатуру. Однако, если пользователь нажимает кнопку "Дом", пока отображается клавиатура, а затем возвращается в приложение, клавиатура все еще видна. Как скрывать клавиатуру, когда приложение закрывает/вводит фон?

Я попробовал следующее в viewDidDisappear:

[eventSearchBar resignFirstResponder];

[eventSearchBar endEditing:YES];

Я также пробовал это в делегате в appDidEnterBackground:

[self.rootController.navigationController.view endEditing:YES];

Ни один из них не работал.

Ответ 1

вы можете сделать это в appDelegate....

- (void)applicationDidEnterBackground:(UIApplication *)application
{
    [self.window endEditing:YES];
}

Ответ 2

Быстрая версия:

func applicationDidEnterBackground(application: UIApplication) {
    window?.endEditing(true)
}

Ответ 3

В вашем представлении контроллер, например, в методе 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];

Ответ 4

У меня все стандартные методы терпит неудачу на моей спорадически. Пока это единственный способ добиться твердых результатов.

В верхнем контроллере.

- (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, но все еще имеет клавиатуру вверх.

Ответ 5

Решение в быстрой версии 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)
    }