10 ответов:
в методе ViewDidLoad вашего класса, настроенного для прослушивания сообщений о клавиатуре:
// Listen for keyboard appearances and disappearances [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidShow:) name:UIKeyboardDidShowNotification object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidHide:) name:UIKeyboardDidHideNotification object:nil];затем в указанных вами методах (в данном случае
keyboardDidShowиkeyboardDidHide) можно сделать что-то об этом:- (void)keyboardDidShow: (NSNotification *) notif{ // Do something here } - (void)keyboardDidHide: (NSNotification *) notif{ // Do something here }
Swift 4:
override func viewWillAppear(_ animated: Bool) { NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillDisappear), name: Notification.Name.UIKeyboardWillHide, object: nil) NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillAppear), name: Notification.Name.UIKeyboardWillShow, object: nil) } @objc func keyboardWillAppear() { //Do something here } @objc func keyboardWillDisappear() { //Do something here } override func viewWillDisappear(_ animated: Bool) { NotificationCenter.default.removeObserver(self) }Swift:
override func viewDidLoad() { super.viewDidLoad() NSNotificationCenter.defaultCenter().addObserver(self, selector:"keyboardWillAppear:", name: UIKeyboardWillShowNotification, object: nil) NSNotificationCenter.defaultCenter().addObserver(self, selector:"keyboardWillDisappear:", name: UIKeyboardWillHideNotification, object: nil) } func keyboardWillAppear(notification: NSNotification){ // Do something here } func keyboardWillDisappear(notification: NSNotification){ // Do something here }Edit:
Вы также можете добавить этот фрагмент кода. Это предотвращает редкие сбои, которые происходят при изменении вашего представления.override func viewWillDisappear(animated: Bool) { super.viewWillDisappear(animated) NSNotificationCenter.defaultCenter().removeObserver(self) }
Swift 3:
NotificationCenter.default.addObserver(self, selector: #selector(viewController.keyboardWillShow(_:)), name: NSNotification.Name.UIKeyboardWillShow, object: nil) NotificationCenter.default.addObserver(self, selector: #selector(viewController.keyboardWillHide(_:)), name: NSNotification.Name.UIKeyboardWillHide, object: nil) func keyboardWillShow(_ notification: NSNotification){ // Do something here } func keyboardWillHide(_ notification: NSNotification){ // Do something here }
Проверьте управление клавиатура раздел "текст, веб и редактирование руководства по программированию" для получения информации об отслеживании клавиатуры отображается или скрыта, и как отобразить/отклонить его вручную.
Swift 4:
NotificationCenter.default.addObserver( self, selector: #selector(ControllerClassName.keyboardWillShow(_:)), name: Notification.Name.UIKeyboardWillShow, object: nil) NotificationCenter.default.addObserver(self, selector: #selector(ControllerClassName.keyboardWillHide(_:)), name: Notification.Name.UIKeyboardWillHide, object: nil)далее, добавив метод, чтобы прекратить прослушивание уведомлений, когда жизнь объекта заканчивается: -
Then add the promised methods from above to the view controller: deinit { NotificationCenter.default.removeObserver(self) } func adjustKeyboardShow(_ open: Bool, notification: Notification) { let userInfo = notification.userInfo ?? [:] let keyboardFrame = (userInfo[UIKeyboardFrameBeginUserInfoKey] as! NSValue).cgRectValue let height = (keyboardFrame.height + 20) * (open ? 1 : -1) scrollView.contentInset.bottom += height scrollView.scrollIndicatorInsets.bottom += height } @objc func keyboardWillShow(_ notification: Notification) { adjustKeyboardShow(true, notification: notification) } @objc func keyboardWillHide(_ notification: Notification) { adjustKeyboardShow(false, notification: notification) }
вы хотите зарегистрироваться для 2 уведомлений клавиатуры:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidShow:) name: UIKeyboardDidShowNotification object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector (keyboardDidHide:) name: UIKeyboardDidHideNotification object:nil];отличный пост о том, как настроить текстовое поле на клавиатуре - http://iosdevelopertips.com/user-interface/adjust-textfield-hidden-by-keyboard.html
Swift-4
override func viewWillAppear(_ animated: Bool) { addKeyBoardListener() } override func viewWillDisappear(_ animated: Bool) { NotificationCenter.default.removeObserver(self) //remove observer } func addKeyBoardListener() { NotificationCenter.default.addObserver(self, selector: #selector(self.keyboardWillShow(_:)), name: NSNotification.Name.UIKeyboardWillShow, object: nil); NotificationCenter.default.addObserver(self, selector: #selector(self.keyboardWillHide(_:)), name: NSNotification.Name.UIKeyboardWillHide, object: nil); } @objc func keyboardWillShow(_ notification: Notification) { } @objc func keyboardWillHide(_ notification: Notification) { }
если у вас более одного
UITextFields и вам нужно что-то сделать, когда (или до) клавиатура появляется или исчезает, вы можете реализовать этот подход.добавить
UITextFieldDelegateв свой класс. Назначьте целочисленный счетчик, скажем:NSInteger editCounter;установите этот счетчик на ноль где-то в
viewDidLoad. Затем, реализоватьtextFieldShouldBeginEditingиtextFieldShouldEndEditingметоды делегата.в первом добавьте 1 к editCounter. Если значение editCounter становится 1-это означает, что появится клавиатура (в случае, если вы возвращаете да). Если editCounter > 1-это означает, что клавиатура уже видна и другой UITextField держит фокус.
на
textFieldShouldEndEditingвычесть 1 из editCounter. Если вы получаете ноль-клавиатура будет уволена, в противном случае она останется на экране.
Swift 4 -
dd 20 october 2017override func viewDidLoad() { [..] NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillDisappear(_:)), name: Notification.Name.UIKeyboardWillHide, object: nil) NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillAppear(_:)), name: Notification.Name.UIKeyboardWillShow, object: nil) } @objc func keyboardWillAppear(_ notification: NSNotification) { if let userInfo = notification.userInfo, let keyboardFrame = (userInfo[UIKeyboardFrameEndUserInfoKey] as? NSValue).cgRectValue { let inset = keyboardFrame.height // if scrollView is not aligned to bottom of screen, subtract offset scrollView.contentInset.bottom = inset scrollView.scrollIndicatorInsets.bottom = inset } } @objc func keyboardWillDisappear(_ notification: NSNotification) { scrollView.contentInset.bottom = 0 scrollView.scrollIndicatorInsets.bottom = 0 } deinit { NotificationCenter.default.removeObserver(self) }
вы могли бы использовать KBKeyboardObserver библиотека. Он содержит несколько примеров и обеспечивает простой интерфейс.
Comments