2012-05-20 25 views
23

キーボードが隠れてテキストフィールドに表示されているときにビューを動かすアニメーションを設定しようとしていますが、これは問題なく動作しますが、フォーカスが1つのテキストフィールドキーボードがすでに表示されているので、別のキーボードには、機能しません。 viewDidLoadでUITextFieldのフォーカス変更を検出する

、私は、次の登録:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil]; 
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil]; 

とビューが移動したりしないし、それに応じてアニメートすべきであるならば、keyboardWillShowとkeyboardWillHide方法で、それが決定します。しかし、キーボードがすでに表示されていて、ユーザーが上に移動するためにビューを必要とする別のテキストフィールドをクリックした場合、メソッドは呼び出されません。キーボードが既に表示されているときにフォーカスが別のテキストフィールドに変更されたかどうかを検出する方法はありますか?すべてのテキストフィールドを代理人に設定しなくても、これを行う方法があれば素晴らしいでしょう。

ありがとうございます。

答えて

57

UITextFieldデリゲートメソッドを使用してください。キーボードメソッドよりも優れています。テキストフィールドにフォーカスがあるとき- (void)textFieldDidBeginEditing:(UITextField *)textField;が呼び出され、フォーカスが失われたときには、- (void)textFieldDidEndEditing:(UITextField *)textField;が解雇されます。応答のための

+1

感謝。これを行うと、userInfoを取得する方法はありますか?これらのメソッドでは、UIKeyboardAnimationDurationUserInfoKeyとUIKeyboardFrameEndUserInfoKeyをuserInfoから取得してアニメーションを設定しているため、パラメータとして渡された通知がないときにどうやって同じことができるのか分かりません。 – Dennis

+0

あなたは必要な情報の種類は何ですか? –

+1

UIKeyboardAnimationDurationUserInfoKey、キーボードアニメーションの継続時間(ビュー移動のアニメーションが一致する可能性があるため)、UIKeyboardFrameEndUserInfoKeyはキーボードの高さを取得します。私は値をハードコードしたくなかった。 – Dennis

6
-(BOOL)textFieldShouldBeginEditing:(UITextField*)textField { 
if (textField.tag == 1) { //first textField tag 
    //textField 1 
} 
else { 
    //textField 2 
} 
} 
1

使用UITextFieldDelegate

func textFieldDidBeginEditing(textField: UITextField) { 
     println("did") 
     if textField.tag == 1{ 
      self.txtFullName.layer.borderColor = UIColor.blueColor().CGColor 
     } 
    } 
+0

実際には機能していますtextFieldDidBeginEditing(_ textField:UITextField){関数の署名 – leofontes

関連する問題