2017-02-14 4 views
0

Мне нужно выяснить, когда текстовое поле станет первым ответчиком, чтобы сообщить мне, будет ли клавиатура, которая будет отображаться, будет препятствовать UITextField. Если да, то я хочу изменить свойства scrollview.Узнайте, когда UIKeyboard.frame пересекается с другим кадром?

Пока у меня есть эта настройка. Я слушаю для UIKeyboardWillShow уведомлений, называет следующий селектор:

func keyboardWillAppear(notification:NSNotification) 
{ 
    if let keyboardSize = (notification.userInfo?[UIKeyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue 
    { 

     if keyboardSize.intersects(textField.frame) 
     { 
      print("It intersects") 
     } 
     else 
     { 
      print("Houston, we have a problem") 
     } 
    } 

Примечание: Я попытался с UIKeyboardDidShow, но до сих пор никакого успеха. UITextField является подразделением scrollView.

ответ

0
  1. слушать изменения размера клавиатуры
  2. CONVERT координате

рабочего образца:

@IBOutlet weak var textView: UITextView! 
override func viewDidLoad() { 
    super.viewDidLoad() 

    //keyboard observers 
    NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillChange), name: NSNotification.Name.UIKeyboardWillChangeFrame, object: nil) 
} 

func keyboardWillChange(notification:NSNotification) 
{ 
    print("Keyboard size changed") 

    if let keyboardSize = notification.userInfo?[UIKeyboardFrameEndUserInfoKey] as? CGRect { 
     //convert gotten rect 
     let r = self.view.convert(keyboardSize, from: nil) 

     //test it 
     if r.intersects(textView.frame) { 
      print("intersects!!!") 
     } 
    } 
} 
+0

@ Dalj-Джан Это помогло. Однако мне нужно было сделать небольшую настройку в функции convert, поэтому вместо nil для моего scrollView, потому что мое текстовое поле является подвью из scrollView. Спасибо брат. –

0

Как насчет сравнения начальной позиции клавиатуры с конечной позицией текст?

работает образец:

func keyboardWillAppear(notification:NSNotification) 
{ 
    if let keyboardSize = (notification.userInfo?[UIKeyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue 
    { 
     if keyboardSize.origin.y < textField.frame.origin.y + textField.frame.size.height { 
      print("It intersects") 
     } else { 
      print("Houston, we have a problem") 
     } 
    } 
}