42

我正在尝试将动画设置为在键盘隐藏并出现在文本字段时向上移动,并且我让它工作得很好,但是当焦点从一个文本字段移动到另一个文本字段时,它不起作用因为键盘已经显示了。

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

提前致谢。

4

4 回答 4

85

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

于 2012-05-20T07:51:45.973 回答
10
-(BOOL)textFieldShouldBeginEditing:(UITextField*)textField {
if (textField.tag == 1) { //first textField tag
    //textField 1
}
else {
   //textField 2
}
}
于 2012-05-20T08:19:13.387 回答
7

使用 UITextFieldDelegate

func textFieldDidBeginEditing(textField: UITextField) {
        println("did")
        if textField.tag == 1{
            self.txtFullName.layer.borderColor = UIColor.blueColor().CGColor
        }
    }
于 2015-09-23T05:19:07.460 回答
4

在 Swift 4 中:

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

它必须类似于:

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

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

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

    ...

}
于 2018-09-18T20:39:52.767 回答