Выход из входного списка AccessViewView после закрытия клавиатуры
То, что я пытаюсь сделать, - создать что-то похожее на функцию поиска "найти на странице" в Safari на iPad.
Я использую UIToolbar
с некоторыми элементами в нем и прикрепляю его к клавиатуре, установив его как inputAccessoryView
на UITextField
. Работает как шарм, но есть одна вещь, которую я не могу понять. В Safari, когда вы что-то ищете, клавиатура исчезает, но панель инструментов остается в нижней части экрана.
Кто-нибудь знает, как это сделать? Единственное решение, о котором я могу думать, - это ответить на событие, отклоненное на клавиатуре, а затем вытащить UIToolbar
и создать пользовательскую анимацию, которая перемещает ее в нижней части экрана. Но это хаки. Я ищу более элегантное решение. Что-то, что может заставить меня решить, что делать с видом вспомогательного входа, когда клавиатура отклоняется.
Ответы
Ответ 1
Сделано вот так:
Назначьте свой UIToolbar свойству в контроллере представления:
@property (strong, nonatomic) UIToolbar *inputAccessoryToolbar;
В контроллере верхнего уровня добавьте следующие методы:
- (BOOL)canBecomeFirstResponder{
return YES;
}
- (UIView *)inputAccessoryView{
return self.inputAccessoryToolbar;
}
И затем (необязательно, как это обычно не требуется), всякий раз, когда клавиатура скрывается, просто вызовите:
[self becomeFirstResponder];
Таким образом, ваш inputAccessoryToolbar будет одновременно вашим контроллером вида и вашим аксессуаром для ввода текста.
Ответ 2
Я закончил с UIToolBar
, который не назначен в качестве вида вспомогательного аксессуара, и слайд вверх и вниз на UIKeyboardWillShowNotification / UIKeyboardWillHideNotification
Ответ 3
Добавляя к ответу @arik, вот версия Swift:
class ViewController: UIViewController {
@IBOutlet var textField: UITextField!
// Input Accessory View
private var inputAccessoryToolbar: UIToolBar?
override func canBecomeFirstResponder() -> Bool {
return true
}
override var inputAccessoryView: UIView? {
return inputAccessoryToolbar
}
override func viewDidLoad() {
super.viewDidLoad()
inputAccessoryToolbar = UIToolbar(frame: CGRectMake(0, 0, view.frame.size.width, 50))
textField.inputAccessoryView = inputAccessoryToolbar
}
// UITextFieldDelegate
func textFieldShouldReturn(textField: UITextField) -> Bool {
becomeFirstResponder()
return true
}
}
Спасибо за чистое решение!