2017-05-19 4 views
-2

サブビュー内に2つのテキストフィールドがあり、サブビュー内でクリックされたテキストフィールドとキーボードが表示されたときにサブビューを移動しようとしています。問題は、サブビューが上になり、2番目のテキストフィールドをクリックしたときにサブビューが下に移動することです。テキストフィールド以外のビューに触れると非表示にする必要があります。キーボードがサブビュー内のテキストフィールドに表示されたときにサブビューを移動する

私の2つのテキストフィールドとサブビューの定義。

@IBOutlet weak var emailTextField: UITextField! 
@IBOutlet weak var passwordTextField: UITextField! 
@IBOutlet weak var loginView: UIView! 

のviewDidLoadでコード

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

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

とshow二つの他の機能と非表示キーボード

func keyboardWillShow(notification: NSNotification) { 

    if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue { 
     if loginView.frame.origin.y == 0{ 
      let height = keyboardSize.height 

      self.loginView.frame.origin.y += height 
     } 

    } 

} 

func keyboardWillHide(notification: NSNotification) { 


    if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue { 
     if loginView.frame.origin.y != 0 { 
      let height = keyboardSize.height 
      self.loginView.frame.origin.y -= height 
     } 

    } 
} 
私がいる間、私はテキストフィールドをクリックしたときに、私はサブビューをダウンを回避することができますどのように知っていただきたいと思い

サブビューはアップです。

答えて

0

キーボードがダウンしているときに、表示のy原点をゼロにしてください。 キーボードが開いている間に他のtextFieldをタップすると、これが表示されます。 FUNC keyboardWillHide(通知:NSNotification){

func keyboardWillShow(notification: NSNotification) { 

    if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue { 
     if loginView.frame.origin.y == 0{ 
      let height = keyboardSize.height 

      self.loginView.frame.origin.y = -height 
     } 

    } 

} 

    if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue { 
     if loginView.frame.origin.y != 0 { 
      let height = keyboardSize.height 
      self.loginView.frame.origin.y = 0 
     } 

    } 
} 
+0

私はself.viewの最上部までのサブビューを移動するにはしたくないが、私はキーボードの高さと同じくらいのサブビューを上に移動したいです。そしておかげさまでしたが、あなたの提案は私の期待通りにうまくいかず、私と同じでした。 – mehmeet43

+0

私のコードは、キーボードの高さごとにビューを上に移動します。 デフォルトでは、キーボードのy-起点は0になり、キーボードが登場すると、高さが100であると仮定して、あなたのビューは-100のy-起点に置かれます。 私のコードは、彼の最後の起源が何であっても、ビューを100ポイント上に移動します。しかし、前のyポジションから100ポイント上に移動するという視点を上げていた。 だから私はちょうど+ =( - 高さ)を削除すると、yを引くことはありません、それはあなたのy値を否定するでしょう。 –

関連する問題