检测UITextField的焦点更改

问题描述 投票:30回答:4

我正在尝试设置视图的动画,当键盘隐藏并显示为文本字段时向上移动,我让它完美地工作,但是当焦点从一个文本字段移动到另一个文本字段时,它不起作用因为键盘已经显示出来了。

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

提前致谢。

iphone ios ios5 uitextfield xcode4.3
4个回答
68
投票

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


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

4
投票

使用UITextFieldDelegate

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

2
投票

在快速4:

  1. UITextFieldDelegate实施到你的ViewController课程中
  2. 为要检测焦点的textFields添加Outlets
  3. 实现函数textFieldDidBeginEditing(如果您希望收到有关该特定操作的通知,请参阅Apple's documentation)并填写代码
  4. viewDidLoad()上指定你的ViewController类作为你之前在第2步中添加的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
    }

    ...

}
© www.soinside.com 2019 - 2024. All rights reserved.