2016-11-10 26 views
0

ダウン私は、私は2つのテキストフィールドとボタンがあり、その内、loginViewを持っています。 textFieldをタップしながらビューを上に移動し、リターンキーを押すとビューを下に移動する必要があります。キーボードが上に移動し、

私の問題は、それがすべての条件のために正常に動作しているが、1つのTextFieldビュー上のタップが上に移動している間、私たちは次のTextFieldビューのために行くと同時に、下に移動されていることです。その後、何のもののこの種を(自動的にTPKeyboardにより管理)を管理する機能の上に実現しないように...

使用TPKeyboardを質問をするための

import UIKit 
class CheckFontIconView: UIViewController,UITextFieldDelegate { 

    var activeField: UITextField? 

    @IBOutlet weak var loginFieldsView: UIView! 

    @IBOutlet weak var label: UILabel! 
    @IBOutlet weak var mobileNo: UITextField! 
    @IBOutlet weak var textFieldPassword: UITextField! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     mobileNo.delegate = self 
     textFieldPassword.delegate = self 

     registerForKeyboardNotifications() 
    } 

    @IBAction func btnLoginAction(_ sender: Any) { 

    } 

    deinit { 

     //NotificationCenter.default.removeObserver(self) 
     self.deregisterFromKeyboardNotifications() 
    } 


    func registerForKeyboardNotifications() { 

     //Adding notifies on keyboard appearing 
     NotificationCenter.default.addObserver(self, selector: #selector(keyboardWasShown(notification:)), name: NSNotification.Name.UIKeyboardWillShow, object: nil) 
     NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillBeHidden(notification:)), name: NSNotification.Name.UIKeyboardWillHide, object: nil) 
    } 

    func deregisterFromKeyboardNotifications() { 

     //Removing notifies on keyboard appearing 
     NotificationCenter.default.removeObserver(self, name: NSNotification.Name.UIKeyboardWillShow, object: nil) 
     NotificationCenter.default.removeObserver(self, name: NSNotification.Name.UIKeyboardWillHide, object: nil) 
    } 

    func keyboardWasShown(notification: NSNotification) { 

     //Need to calculate keyboard exact size due to Apple suggestions 
     var info = notification.userInfo! 
     let keyboardSize = (info[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue.size 
     if self.activeField != nil { 
      self.loginFieldsView.frame.origin.y -= (keyboardSize?.height)! 
     } 
    } 

    func keyboardWillBeHidden(notification: NSNotification) { 

     //Once keyboard disappears, restore original positions 
     var info = notification.userInfo! 
     let keyboardSize = (info[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue.size 
     self.loginFieldsView.frame.origin.y -= (keyboardSize?.height)! 
     self.loginFieldsView.endEditing(true) 
    } 

    func textFieldDidBeginEditing(_ textField: UITextField) { 
     self.activeField = textField 
    } 

    func textFieldDidEndEditing(_ textField: UITextField) { 
     self.activeField = nil 

    } 

    func textFieldShouldReturn(_ textField: UITextField) -> Bool { 
     activeField?.resignFirstResponder() 
     return true 
    } 
} 
+0

最も簡単な方法は、キーボードを表示するかどうかを示すフラグを設定することです。したがって、表示されていない場合にはそれを処理するか、次のtextFieldに移動します。 – nynohu

+0

はい私は以前にフラグを設定したものを試しましたが、同じ問題が発生していました。 – kishor0011

+0

ログインビューでUIScrollViewを使用する場合は、問題が修正される可能性があります。 –

答えて

0

おかげで...

更新:

私はあなたが下のコードでいくつかの間違いをしたと思います...

func textFieldDidEndEditing(_ textField: UITextField) { 
     self.activeField = nil 
} 

あなたはDEBUGに持っているとしたらscrollViewにしてみてください...コーディング

ハッピー..

+0

私はライブラリを使いたくありません。 – kishor0011

+0

私はデバッグしても問題は発生しません。 – kishor0011

+0

デモプロジェクトを私と共有できますか... – iMHitesh

1

を正確な問題を特定し、私はそれはあなたを助けることを願っています。

は上下にテキストフィールドを移動するには、スクロールビューを使用します。

  1. を構成する

    は@IBOutlet弱いのvarスクロールしてください:UIScrollViewのを!; textFieldDidBeginEditingの下

  2. :0とy texfield.frame.origin.y
  3. をそしてsetContentOffsetでスクロール移動を開始::のTextFieldメソッドは
  4. のxとするCGPointを作成します。アニメーション機能を(パラメータは、あなたのするCGPointとなりますブール値true)。

  1. textFieldDidEndEditing下で作成:テキストフィールドには、同じsetContentOffsetでCGPoint.zeroにあなたのスクロールバーを設定します。アニメーション機能を。

*また、textFieldShouldReturn:textFieldはresignFirstResponderまたはnext textFieldにする必要があります。

この上の任意の問題を持つ場合は私に知らせてください。

+0

しかし、私は2つのtextFieldしか持っていません。なぜscrollViewを使うべきですか? ありがとう – kishor0011

+0

あなたの懸念は正しいが、どういうわけか、ビューを右に移動したいのですか?scrollViewを使用すると、キーボードの動きに応じて上下にスクロールするのに役立ちます。 –

0

問題の簡単なコードを作成しました。それは良いことではありませんが、そのアイデアを参照して問題を解決することができます。

import UIKit 

class ViewController: UIViewController, UITextFieldDelegate { 

    var activeField: UITextField? 

    @IBOutlet weak var loginFieldsView: UIView! 

    @IBOutlet weak var label: UILabel! 
    @IBOutlet weak var mobileNo: UITextField! 
    @IBOutlet weak var textFieldPassword: UITextField! 
    var originalHeight:CGFloat! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     mobileNo.delegate = self 
     textFieldPassword.delegate = self 
     originalHeight = self.loginFieldsView.frame.origin.y 

     registerForKeyboardNotifications() 
    } 

    @IBAction func btnLoginAction(_ sender: Any) { 

    } 

    deinit { 

     //NotificationCenter.default.removeObserver(self) 
     self.deregisterFromKeyboardNotifications() 
    } 


    func registerForKeyboardNotifications() { 

     //Adding notifies on keyboard appearing 
     NotificationCenter.default.addObserver(self, selector: #selector(keyboardWasShown(notification:)), name: NSNotification.Name.UIKeyboardWillShow, object: nil) 
     NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillBeHidden(notification:)), name: NSNotification.Name.UIKeyboardWillHide, object: nil) 
    } 

    func deregisterFromKeyboardNotifications() { 

     //Removing notifies on keyboard appearing 
     NotificationCenter.default.removeObserver(self, name: NSNotification.Name.UIKeyboardWillShow, object: nil) 
     NotificationCenter.default.removeObserver(self, name: NSNotification.Name.UIKeyboardWillHide, object: nil) 
    } 

    func keyboardWasShown(notification: NSNotification) { 

     //Need to calculate keyboard exact size due to Apple suggestions 
     var info = notification.userInfo! 
     let keyboardSize = (info[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue.size 
     if self.activeField != nil { 
      if self.loginFieldsView.frame.origin.y == originalHeight { 
       self.loginFieldsView.frame.origin.y -= (keyboardSize?.height)! 
      } 
     } 
    } 

    func keyboardWillBeHidden(notification: NSNotification) { 

     //Once keyboard disappears, restore original positions 
     var info = notification.userInfo! 
     let keyboardSize = (info[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue.size 
     if originalHeight > self.loginFieldsView.frame.origin.y { 
      self.loginFieldsView.frame.origin.y += (keyboardSize?.height)! 
     } 
     self.loginFieldsView.endEditing(true) 
    } 

    func textFieldDidBeginEditing(_ textField: UITextField) { 
     self.activeField = textField 
    } 

    func textFieldDidEndEditing(_ textField: UITextField) { 
     self.activeField = nil 

    } 

    func textFieldShouldReturn(_ textField: UITextField) -> Bool { 
     activeField?.resignFirstResponder() 
     return true 
    } 
} 
+0

@ kishor0011私は自分の答えを編集しています。これをチェックしてください。 – nynohu

+0

私は試しましたが、私の問題を解決しませんでした。このビューでは、viewControllerから移動しています。 ありがとう – kishor0011

+0

最新のコードと置き換えてください。私はテストし、それは働いた。 – nynohu

0

変数を1つだけ変更すると、ビューの古いフレームが保持され、キーボードが消えたときに再びビューに割り当てられます。

+0

私はそれを確認し、あなたに知らせます。 ありがとう – kishor0011

+0

質問を確認してください self.loginFieldsViewが動いている間、両方のtextFieldsをタップするだけです。 問題はあなたに知って頂くでしょう。 – kishor0011

+0

@ kishor0011ビューのスクリーンショットを表示できるので、ビューがどのように上がっていくかをよりよく理解できますか? –

関連する問題