resignFirstResponder не закрывает клавиатуру

У меня есть UITextField и UIButton. Если нажать кнопку, когда текстовое поле активно, я хочу закрыть клавиатуру, но я не могу этого сделать. Я пробовал вызывать [textField resignFirstResponder] и [textField endEditing: YES] при нажатии кнопки, но они не действуют - [textField isFirstResponder] возвращает false, поэтому неудивительно, что resignFirstResponder не действует. Но в таком случае почему клавиатура не исчезает? Спасибо.


person Kartick Vaddadi    schedule 21.02.2011    source источник
comment
Кроме того, если я нажимаю на представление, когда клавиатура активна, клавиатура снова отображается при открытии представления. Запоминает ли UIKit, какое представление является первым респондентом, и восстанавливает ли статус первого респондента для этого представления, когда отображается его контроллер представления?   -  person Kartick Vaddadi    schedule 21.02.2011
comment
Наконец, есть ли чистый способ, чтобы клавиатура исчезла, если пользователь коснется или проведет пальцем в другом месте? Что-то вроде disableKeyboardOnFocusLoss было бы идеально :) Спасибо.   -  person Kartick Vaddadi    schedule 21.02.2011


Ответы (3)


Убедитесь, что член вашего класса "textField" правильно подключен к файлу пера. NSLog это значение прямо перед тем, как вы вызовете firstResponder и посмотрите, равно ли оно нулю. Кроме того, введите текст в текстовое поле и убедитесь, что вы можете правильно распечатать его с помощью NSLog в том же месте, где вы вызываете resignFirstResponder. Обычно, когда элемент управления не отвечает правильно, это потому, что IBOutlets не подключены должным образом.

person Bogatyr    schedule 21.02.2011
comment
Ах, IBOutlet не был связан в IB. Спасибо и извините, что потратили время. - person Kartick Vaddadi; 21.02.2011
comment
Есть ли способ настроить UITextField так, чтобы он закрыл клавиатуру при любом прикосновении или смахивании в любом другом представлении в окне? - person Kartick Vaddadi; 21.02.2011
comment
Совершенно не бесполезно, чем больше вопросов / ответов люди видят в таком виде, тем больше и раньше они проверяют торговые точки! возникает мысль, тем скорее проблемы будут устранены. - person Bogatyr; 21.02.2011
comment
Я думаю, вам нужно добавить код во все другие представления, чтобы убрать клавиатуру, если она активна. Если у вас более одного UITextField, тогда кешируйте текущий активный в члене данных вашего класса, таком как UITextField * currentTF, а затем просто вызовите [self.currentTF resignFirstResponder], когда любое другое представление получит некоторую активность. - person Bogatyr; 21.02.2011

Попробуйте создать IBAction

-(IBAction)textFieldReturn:(id)sender
{
[sender resignFirstResponder];
}

И подключите его к UIButton

person Knodel    schedule 21.02.2011
comment
Но пользователь, возможно, не нажал возврат! Почему автоматическое включение ключа возврата должно иметь значение? Я хочу, чтобы клавиатура исчезла, если пользователь нажимает кнопку, когда текстовое поле активно - меня не волнует клавиша возврата. Спасибо. - person Kartick Vaddadi; 21.02.2011
comment
Отредактировал ответ, надеюсь, это поможет. - person Knodel; 21.02.2011
comment
Да, связь оказалась пропавшей. Я такой глупый. Спасибо за вашу помощь! - person Kartick Vaddadi; 21.02.2011

вы добавили <UITextFieldDelegate> в свой .H ??

person elp    schedule 21.02.2011
comment
Итак, я определил IBAction, который подключен в IB к клавише Return. Поскольку все методы делегата являются необязательными и по умолчанию предполагается, что textFieldShouldEndEditing возвращает true, я не понимаю, зачем мне этот делегат. Я что-то упускаю? - person Kartick Vaddadi; 21.02.2011
comment
Это плохой ответ. Отсутствие добавления делегата к определению класса в файле .h приведет к ошибке компиляции, если вы сделаете что-то вроде: self.delegate = self. - person marcelnijman; 17.03.2012