У меня есть UITextField и UIButton. Если нажать кнопку, когда текстовое поле активно, я хочу закрыть клавиатуру, но я не могу этого сделать. Я пробовал вызывать [textField resignFirstResponder] и [textField endEditing: YES] при нажатии кнопки, но они не действуют - [textField isFirstResponder] возвращает false, поэтому неудивительно, что resignFirstResponder не действует. Но в таком случае почему клавиатура не исчезает? Спасибо.
resignFirstResponder не закрывает клавиатуру
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
Ах, IBOutlet не был связан в IB. Спасибо и извините, что потратили время.
- person Kartick Vaddadi; 21.02.2011
Есть ли способ настроить UITextField так, чтобы он закрыл клавиатуру при любом прикосновении или смахивании в любом другом представлении в окне?
- person Kartick Vaddadi; 21.02.2011
Совершенно не бесполезно, чем больше вопросов / ответов люди видят в таком виде, тем больше и раньше они проверяют торговые точки! возникает мысль, тем скорее проблемы будут устранены.
- person Bogatyr; 21.02.2011
Я думаю, вам нужно добавить код во все другие представления, чтобы убрать клавиатуру, если она активна. Если у вас более одного 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
Но пользователь, возможно, не нажал возврат! Почему автоматическое включение ключа возврата должно иметь значение? Я хочу, чтобы клавиатура исчезла, если пользователь нажимает кнопку, когда текстовое поле активно - меня не волнует клавиша возврата. Спасибо.
- person Kartick Vaddadi; 21.02.2011
Отредактировал ответ, надеюсь, это поможет.
- person Knodel; 21.02.2011
Да, связь оказалась пропавшей. Я такой глупый. Спасибо за вашу помощь!
- person Kartick Vaddadi; 21.02.2011
вы добавили <UITextFieldDelegate>
в свой .H ??
person
elp
schedule
21.02.2011
Итак, я определил IBAction, который подключен в IB к клавише Return. Поскольку все методы делегата являются необязательными и по умолчанию предполагается, что textFieldShouldEndEditing возвращает true, я не понимаю, зачем мне этот делегат. Я что-то упускаю?
- person Kartick Vaddadi; 21.02.2011
Это плохой ответ. Отсутствие добавления делегата к определению класса в файле .h приведет к ошибке компиляции, если вы сделаете что-то вроде: self.delegate = self.
- person marcelnijman; 17.03.2012