Подтвердить что ты не робот

Больше не удается скрыть клавиатуру во время просмотра. Будет показано в iOS7

Следующий код, используемый для работы в iOS6, чтобы скрыть клавиатуру, когда контроллер отображения был удален из стека навигации:

- (void)viewWillDisappear:(BOOL)animated {
    [self.view endEditing:YES];
    [super viewWillDisappear:animated];
}

Однако в iOS7 строка [self.view endEditing: YES], похоже, игнорируется. Я пробовал команду в других событиях просмотра (viewDidDisappear, viewWillAppear и viewDidAppear), и единственным, с которым он работал, является viewDidAppear. Похоже, что когда инициируется "поп", мы теряем способность скрывать клавиатуру, пока контроллер просмотра "не будет нажат" обратно в стек.

При размещении кода в viewDidAppear работает, чтобы скрыть клавиатуру, плохо то, что клавиатура отображается кратковременно, когда viewController возвращается в навигационный стек... довольно неприемлемо с точки зрения пользовательского интерфейса.

Кто-нибудь еще имел успех в работе над этой проблемой? Я бы предпочел не писать собственную кнопку ОТМЕНА, но прямо сейчас это единственное, о чем я могу думать, что это сработает.

4b9b3361

Ответ 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];
}