检测UITextField的焦点更改

Den*_*nis 36 iphone uitextfield ios ios5 xcode4.3

我想设置动画的视图向上移动时,键盘被隐藏和显示文本字段,我得到它的工作完全正常,但是当从一个文本字段焦点移动到另一个,这是行不通的因为键盘已经显示出来了.

在viewDidLoad中,我注册了以下内容:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil];
Run Code Online (Sandbox Code Playgroud)

然后在keyboardWillShow和keyboardWillHide方法中,它确定视图是否应该移动并相应地设置动画.但是,如果已经显示了键盘并且用户单击了需要视图向上移动的另一个文本字段,则不会调用该方法.当键盘已经显示时,有没有办法检测焦点是否已更改为另一个文本字段?如果有一种方法可以做到这一点,而不必将所有文本字段设置为委托,那将是很好的.

提前致谢.

Mal*_*ndi 75

使用UITextField委托方法..在你的情况下它比键盘方法更好..当textField获得焦点时,- (void)textFieldDidBeginEditing:(UITextField *)textField;将被触发..当它失去焦点时- (void)textFieldDidEndEditing:(UITextField *)textField; 将被触发.


War*_*shi 9

-(BOOL)textFieldShouldBeginEditing:(UITextField*)textField {
if (textField.tag == 1) { //first textField tag
    //textField 1
}
else {
   //textField 2
}
}
Run Code Online (Sandbox Code Playgroud)


Ray*_*sco 5

使用UITextFieldDelegate

func textFieldDidBeginEditing(textField: UITextField) {
        println("did")
        if textField.tag == 1{
            self.txtFullName.layer.borderColor = UIColor.blueColor().CGColor
        }
    }
Run Code Online (Sandbox Code Playgroud)


olm*_*ocr 5

在快速4中:

  1. 实施UITextFieldDelegate到你的ViewController班级
  2. textFields添加您想要检测焦点的Outlet
  3. 实现功能textFieldDidBeginEditing(如果您想收到有关该特定操作的通知,请参阅Apple 的文档)并用您的代码填充它
  4. viewDidLoad()您的班级指定为您之前在步骤 2 中添加的ViewController委托textField

它看起来必须类似于:

class ViewController: UIViewController, UITextFieldDelegate {
    @IBOutlet weak var yourTextField: UITextField!

    func textFieldDidBeginEditing(_ textField: UITextField) {
        // Your code here
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        yourTextField.delegate = self
    }

    ...

}
Run Code Online (Sandbox Code Playgroud)