resignFirstResponder не скрывает клавиатуру на textFieldShouldReturn - PullRequest
29 голосов
/ 26 июня 2010

У меня есть представление с UITextField, которое должно скрывать клавиатуру при нажатии Return.

Моя функция такова:

- (BOOL)textFieldShouldReturn:(UITextField *)textField {
 if ( textField == userPassword ) {
  [textField resignFirstResponder];
 }
 return YES;
}

Обычно клавиатура должна быть скрыта, но она остается на экране. resignFirstResponder правильно вызывается. Чего мне не хватает?

Ответы [ 14 ]

49 голосов
/ 21 февраля 2011

Я вижу, у вас есть тег iPad на этом. Вы случайно представляете модальное представление с использованием UIModalPresentationFormSheet? Если это так, то это выглядит как ограничение модальной презентации FormSheet (либо Apple по какой-то причине делает это намеренно, либо это ошибка). Смотрите эти другие вопросы для более подробной информации:

Модальное диалоговое окно не закрывает клавиатуру

Контроллер Modal View с клавиатурой на альбомном iPad изменяет местоположение при отклонении

33 голосов
/ 03 мая 2012

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

 - (BOOL)disablesAutomaticKeyboardDismissal { return NO; }

Это переопределит поведение по умолчанию для модального диалога, установленного Apple, и позволит вам отклонить клавиатуру.Это в классе UIViewController.

Надеюсь, это кому-нибудь поможет!

10 голосов
/ 13 августа 2010

Если вы используете Интерфейсный Разработчик, посмотрите, имеет ли ваш UITextField делегированную связь с вашим классом.

-Выберите свой UITextField и в своем подключении посмотрите, выходит ли одно подключение в Outlets-> делегат. Если нет, свяжитесь с вашим классом владельца файла.

Это должно быть связано с классом владельца вашего файла. Этот делегат сообщает, где искать метод. Если вы переопределяете метод, вам нужно указать, где объект будет искать его.

7 голосов
/ 28 сентября 2012

Это решение сработало для меня после того, как ничего из вышеперечисленного не сработало. после вызова resignFirstResponder я добавил модальное представление и удалил его.



    [myTextField resignFirstResponder];
    UIViewController *dummyController = [[UIViewController alloc] init];
    UIView *dummy = [[UIView alloc] initWithFrame:CGRectMake(-1, -1,1,1)];
    [dummyController setView:dummy];
    [self presentModalViewController:dummyController animated:NO];
    [dummyController dismissModalViewControllerAnimated:NO];

4 голосов
/ 18 ноября 2011

Чтобы справиться с ошибкой, упомянутой Брэндоном, вы можете попробовать закрыть и снова открыть свой контроллер модального вида, если у вас все еще есть ссылка на него.

[textField resignFirstResponder];
[self dismissModalViewControllerAnimated:NO];
[self presentModalViewController:yourModalViewControllerReference animated:NO];

(где «self» - это контроллер, который вы использовали для первоначального открытия контроллера модального представления)

3 голосов
/ 12 декабря 2012

xcode 4.5.1

Просто щелкните элемент управления, затем перетащите и отпустите текстовое поле в файле .h

(клавиша управления + перетащите )

, затем во всплывающем меню выберите

connection=acton;
name= any name;
type=id;
event=did end on exit;
arguments=sender;

, затем нажмите кнопку подключения

3 голосов
/ 18 января 2011

У меня была такая же проблема. Я понял, что после подключения делегата к Владельцу файла в Интерфейсном Разработчике я забыл сохранить в Интерфейсном Разработчике. После сохранения я перекомпилировал и клавиатура исчезла правильно при нажатии возврата.

2 голосов
/ 31 января 2011

Вы помните, чтобы реализовать протокол UITextFieldDelegate?

1 голос
/ 22 апреля 2014

Я прочитал так много статей об этой проблеме, где экранная клавиатура отказывается прятаться, когда вы звоните resignFirstResponder, но ни одно из предложений не помогло мне.

Я использую XCode 5 (iOS7) и иметь экран iPhone, содержащий пару элементов управления, для которых требуется экранная клавиатура, но если пользователь нажимает на UIButton, то я хочу, чтобы клавиатура исчезла.

enter image description here

Я, вероятно, потратил впустую целый день, экспериментируя с resignFirstResponder и добавляя disablesAutomaticKeyboardDismissal функции для возврата NO, но ничего не получалось.Как только появилась экранная клавиатура, я никогда не мог заставить ее исчезнуть снова.

Но тогда у меня была небольшая мозговая волна (поскольку у меня только маленький мозг).

Теперь, когда пользователь нажимаетна моем UIButton я просто отключаю элементы управления UITextField и UITextView.

- (IBAction)btnDate_Tapped:(id)sender {
    //  The user has clicked on the "Date" button.
    self.tbClientName.enabled = NO;
    self.tbComments.editable = NO;

И вдруг приложение обнаруживает, что в нем нет редактируемых текстовых полей, нуждающихся в экранной клавиатуреи аккуратно выдвигает клавиатуру из поля зрения.

(С облегчением вздохнул).

My UIButton на самом деле вызывает всплывающее диалоговое окно.Когда пользователь закрывает всплывающее окно, я снова включаю эти два элемента управления, поэтому, если пользователь нажимает на один из них, клавиатура снова появляется.

-(void)popoverControllerDidDismissPopover:(UIPopoverController *) popoverController {
    //  The user has closed our popup dialog.
    //  We need to make our UITextField and UITextView editable again.
    self.tbClientName.enabled = YES;
    self.tbComments.editable = YES;
    ... etc...
}

Просто, не правда ли!

И, что удивительно, этот обходной путь работает даже на UIViewControllers, который появляется в Модальном стиле.

Я надеюсь, что это поможет другим жертвам XCode там.

0 голосов
/ 28 сентября 2017

Swift 3.0

func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {

    if textField == addressTextField {
        textField.resignFirstResponder()

        return false
    }

    return true
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...