Больше не удается скрыть клавиатуру во время просмотра. Будет показано в iOS7
Следующий код, используемый для работы в iOS6, чтобы скрыть клавиатуру, когда контроллер отображения был удален из стека навигации:
- (void)viewWillDisappear:(BOOL)animated {
[self.view endEditing:YES];
[super viewWillDisappear:animated];
}
Однако в iOS7 строка [self.view endEditing: YES], похоже, игнорируется. Я пробовал команду в других событиях просмотра (viewDidDisappear, viewWillAppear и viewDidAppear), и единственным, с которым он работал, является viewDidAppear. Похоже, что когда инициируется "поп", мы теряем способность скрывать клавиатуру, пока контроллер просмотра "не будет нажат" обратно в стек.
При размещении кода в viewDidAppear работает, чтобы скрыть клавиатуру, плохо то, что клавиатура отображается кратковременно, когда viewController возвращается в навигационный стек... довольно неприемлемо с точки зрения пользовательского интерфейса.
Кто-нибудь еще имел успех в работе над этой проблемой? Я бы предпочел не писать собственную кнопку ОТМЕНА, но прямо сейчас это единственное, о чем я могу думать, что это сработает.
Ответы
Ответ 1
В iOS 7 произошли изменения, когда контроллеры представлений, представленные в виде модальных форм, по умолчанию не могут отменить клавиатуру. Чтобы исправить это, вам необходимо переопределить ваш контроллер вида disablesAutomaticKeyboardDismissal
и вернуть NO
.
Ответ 2
Если это a UITextView
, установите для свойства editable
значение NO
. Я попробовал это, и он скрывает клавиатуру, как только она будет установлена. Я не пробовал его с помощью UITextField
, но я предполагаю, что вы получите тот же результат с установкой свойства enabled
на NO
. Если это не сработает, создайте UITextField
с userInteractionEnabled
, установленным в NO
в качестве фона для прозрачного UITextView
, и используйте свойство editable
, как указано выше.
Ответ 3
Проблема заключается в том, что где-то между моментом, когда я нажимаю кнопку "НАЗАД" и время, когда открывается viewWillDisappear, текущее текстовое поле canResignFirstResponder получает значение FALSE, что препятствует скрытию клавиатуры. Я не смог обнаружить что-либо в своем коде, что может вызвать это, и я сильно подозреваю, что это может быть какая-то ошибка iOS 7, так как тот же код работал у меня под iOS 6.
В качестве обходного решения я применил следующее решение. Я подклассифицировал UINavigationController и перепробовал следующий метод:
- (UIViewController *)popViewControllerAnimated:(BOOL)animated {
[self.topViewController.view endEditing:YES];
return [super popViewControllerAnimated:animated];
}
Это заставило клавиатуру соответствующим образом исчезнуть, когда я нажал кнопку "Назад", чтобы вывести текущий контроллер. Приятный вздох облегчения, что мне не нужно было писать кучу пользовательских кнопок "Назад".
Ответ 4
Чтобы скрыть клавиатуру, когда текстовое поле потеряло фокус
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
if ([textField isFirstResponder])
[textField resignFirstResponder];
return YES;
}
Ответ 5
Я пробовал обходной путь. Возможно, это не то, что вы, ребята, ожидаете.
Если вы используете раскадровку, вы можете отменить клавиатуру в методе prepareForSeuge.
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
[self.view endEditing:YES];
}
Это сработало для меня.
Ответ 6
Подход, приведенный ниже, обязательно скроет строку состояния в iOS7.
- (BOOL)prefersStatusBarHidden
{
return YES;
}
Добавьте это в свой .plist файл (перейдите в "info" в настройках вашего приложения)
View controller-based status bar appearance --- NO
Затем вы можете вызвать эту строку, чтобы скрыть строку состояния:
[[UIApplication sharedApplication] setStatusBarHidden:YES];
Если ваше приложение разработано только для поддержки iPhone, строка состояния не будет скрываться при запуске приложения в iPad.
Ответ 7
Поместите свой UItextfield или UItextview для глобального объявления.
Текстовое поле UITextfield = ваш объект текстового поля;
-(void)viewWillDisappear:(BOOL)animated
{
[self.view endEditing:YES];
[textfield resignFirstResponder];
[super viewWillDisappear:animated];
}