2012-05-20 32 views
23

我正在尝试设置动画的视图向上移动时,键盘被隐藏和显示文本字段,我得到它的工作完全正常,但是当从一个文本字段移动焦点到另一个,它不起作用,因为键盘已经显示。检测对焦更改为UITextField

在viewDidLoad中,我注册以下:

[[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委托方法..它比你的情况更好的键盘方法..当textField得到了重点- (void)textFieldDidBeginEditing:(UITextField *)textField;将被解雇..当它失去焦点- (void)textFieldDidEndEditing:(UITextField *)textField;将被解雇。

+1

感谢您的答复。如果我这样做,有没有办法获得userInfo?因为在这些方法中,我从userInfo获得了UIKeyboardAnimationDurationUserInfoKey和UIKeyboardFrameEndUserInfoKey来设置动画,但我不确定在没有通知作为参数传入时我该如何做同样的事情? – 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

它实际上是func textFieldDidBeginEditing(_ textField:UITextField){函数签名 – leofontes