2017-10-22 13 views
0

私のアプリケーションのビューでは、ScrollView内にいくつかのTextFieldがあります。 UIKeyboardWillShow/WillHide通知を実装しました。しかし、私はそれにいくつかの問題があります。テキストフィールドをタップすると、WillShowは完璧に動作しますが、キーボードが非表示になってテキストフィールドを再度タップした後は、もう動作しません。私は別のテキストフィールドと同じ問題をタップします。別のテキストフィールドで2〜3回タップした後、再び同じ問題が発生します。これは私が使用して私のコードです:UIKeyboardWillShow通知に関する問題

NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow), name: .UIKeyboardWillShow, object: nil) 
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillHide), name: .UIKeyboardWillHide, object: nil) 

のfuncs:

@objc func keyboardWillShow(notification: Notification) { 
    if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue { 
     if view.frame.origin.y == 0 { 
      view.frame.origin.y -= keyboardSize.height/2 
     } 
    } 
} 

@objc func keyboardWillHide(notification: Notification) { 
    if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue { 
     if view.frame.origin.y != 0{ 
      view.frame.origin.y += keyboardSize.height/2 
     } 
    } 
} 

と、これは、ユーザーがビュー内のどこかをタップしたときに、私はキーボードを隠す方法です:

func hideKeyboardWhenTappedAround() { 
    let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(UIViewController.dismissKeyboard)) 
    tap.cancelsTouchesInView = false 
    view.addGestureRecognizer(tap) 
} 

func dismissKeyboard() { 
    view.endEditing(true) 
} 

私ができます何が問題なのか、どのように修正できるのかを見つけ出すことはできません。私のiPhone 6にiOS 11.0.3があります。

答えて

0

これを試してみてください。

func keyboardWillShow(notification: NSNotification) { 

    if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue { 

     self.view.frame.origin.y = -keyboardSize.height/2 
    } 
} 

func keyboardWillHide(notification: NSNotification) { 

    if let _ = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue { 

     self.view.frame.origin.y = 0 
    } 
}