Я здесь noob и в мире iOS. У меня проблемы с клавиатурой в конкретном случае в моем очень простом списке приложений iOS.Как убрать клавиатуру с несколькими UITextField
Я бы хотел, чтобы клавиатура была убрана, когда пользователь удаляет теги вне текущего текстового поля или самой клавиатуры. До сих пор я просто прекратил клавиатуру (спасибо вам, ребята, в переполнении стека), когда пользователь нажимает на UITableView или большинство элементов моего приложения. HOWEVER, Когда пользователь нажимает на другой UITextField, клавиатура не исчезает.
FYI, вот список существующих тем, которые я исследовал до сих пор, но еще не решил эту проблему. 1) How to dismiss keyboard iOS programmatically 2) Resigning First Responder for multiple UITextFields 3) Dismissing the First Responder/Keyboard with multiple Textfields 4) (несколько больше, по крайней мере, но я потерял :()
Вот что я сделал до сих пор:
(in viewDidLoad())
// Add 'tap' gesture to dismiss keyboard when done adding/editing to-do item
var tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: "tapOutside:")
tap.cancelsTouchesInView = true
self.view.addGestureRecognizer(tap)
func tapOutside(tapOutside: UIGestureRecognizer) {
// Dismiss keyboard
self.view.endEditing(true)
}
@IBAction func EditingDidBegin(sender: UITextField) {
// Highlight the text field which user is editing
self.highlightTextField(sender, highlight: true)
}
@IBAction func EditingDidEnd(sender: UITextField) {
// Undo text field highlight
self.highlightTextField(sender, highlight: false)
self.view.endEditing(true) // try this option and not working
self.setEditing(false, animated: true) // try this option and not working
sender.resignFirstResponder() // try this option and not working
UIApplication.sharedApplication().becomeFirstResponder() // try this option and not working
... // below is my code to update the todo item
}
Я также попытался распечатайте все subviews.isFirstResponder() моего представления. Все это возвращает false. Я также попробовал переопределить touchsBegan моего UIViewController, а внутри него просто вызывает self.view.endEditing (true) и вызывает его супер. Это также не работает .
Пожалуйста, помогите. :(
ТИА
UPDATE: Вы, ребята, удивительный!.. DI получил это работает в настоящее время благодаря вам, ребята Существовали несколько ошибок/перепутались, как я изучаю новые рамки Так вот что я
1) Я не задал делегат UITextField правильно. Ошибка: я скопировал текстовое поле в xcode и связал свой viewController как делегат и подумал, что это должно получиться. Мне все еще нужно исследовать и лучше понять, почему. Решение: я удалил ссылку ctrl-drag и явно вызвал myTextField.delegate = self в tableView: cellForRowAtIndexPath. И это все. Спасибо @Sidewalker
2) Ошибка: у меня смешанный текстFieldShouldBeginEditing и т. Д. И @IBAction func EditingDidBegin. Поэтому я попал в ситуацию, когда textFieldShouldBeginEditing получил звонок, но EditingDidBegin не получил вызов. Решение: как только я установил делегат = я явно и придерживаюсь реализации методов textField ... и не использую @IBAction для textField, все просто работает.
Hi Sidetalker, Большое спасибо за ваш ответ.Быстрые вопросы: (но связанные с этим) 1) Я изначально не назначил делегат, я только реализую протокол UITextFieldDelegate. Мои методы, такие как textFieldDidBeginEditing, вызывались без установки делегата, поскольку вы явно показываете мне в своем примере (myTextField.delegate = self). Это то же самое, что использовать интерфейс Xcode для подключения с помощью ctrl-drag и выбрать мой UIViewController в качестве делегата для UITextField в каждом из UITableViewCell? – wotzup
2) вопрос с другой стороны: теперь я устанавливаю myTextField.delegate = self в свой tableView: cellForRowAtIndexPath. Я не вижу различий в поведении приложения. 3) Я очень смущен, почему мой текстFieldShouldBeginEditing вызывается для элемента B, но мой textFieldDidBeginEditing делает ** не ** вызывается. (пример контекста: у моего приложения todo есть текущие 3 элемента: A, B, C. Я нажимаю на элемент A и получаю вызовы textFieldShouldBeginEditing и textFieldDidBeginEditing для элемента A. тогда я нажимаю элемент B, я получаю вызов только для textFieldSholdBeginEditing, но не textFieldDidBeginEditing для элемента А. Не могли бы вы помочь мне разобраться? TIA – wotzup
1) Да, те делают то же самое – Sidetalker