Iphone 检测UITextField的焦点更改

Iphone 检测UITextField的焦点更改,iphone,ios,ios5,uitextfield,xcode4.3,Iphone,Ios,Ios5,Uitextfield,Xcode4.3,当键盘隐藏和显示文本字段时,我尝试将视图的动画设置为向上移动,我使其工作得非常好,但当焦点从一个文本字段移动到另一个文本字段时,它不工作,因为键盘已经显示 在viewDidLoad中,我注册了以下内容: [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil]; [[NSNo

当键盘隐藏和显示文本字段时,我尝试将视图的动画设置为向上移动,我使其工作得非常好,但当焦点从一个文本字段移动到另一个文本字段时,它不工作,因为键盘已经显示

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


提前谢谢

使用
UITextField
委托方法。。它比键盘方法更适合你的情况。。当textField获得焦点时,
-(void)textField开始编辑:(UITextField*)textField将被激发。。当它失去焦点时,
-(void)textfielddendediting:(UITextField*)textField将被激发。

使用UITextFieldDelegate

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

在swift 4中:

  • ViewController
    类中实现
    UITextFieldDelegate
  • 添加要检测焦点的
    文本字段的出口
  • 实现函数
    textfielddibeginediting
    (如果您希望收到有关该特定操作的通知,请参阅),并用代码填充该函数
  • viewdiload()
    上,指定您的
    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
        }
    
        ...
    
    }
    

    谢谢你的回复。如果我这样做,有没有办法获取用户信息?因为在这些方法中,我从userInfo中获取了UIKeyboardAnimationDurationUserInfoKey和UIKeyboardFrameEndUserInfoKey来设置动画,但我不确定在没有作为参数传递通知的情况下,如何才能对键盘动画持续时间执行相同的操作?UIKeyboardAnimationDurationUserInfoKey(因此视图移动的动画可以匹配),和UIKeyboardFrameEndUserInfoKey来获取键盘的高度。我不想硬编码这些值。由于动画持续时间和键盘高度是静态变量,您可以读取一次并将其存储在
    NSUSerDefaults
    中,以便以后您可以在任何地方使用它们。是的,我应该这样做。我只是觉得很懒,想看看是否没有这里有一种更简单的方法,可以在焦点已更改为另一个文本字段时获得通知。无论如何,谢谢!它实际上是func textField didbeginediting(utextfield:UITextField){函数signatureverification passedit应该有一个标记,大多数情况下,您可以有多个标记,并希望检查其中一个是否有焦点。
    class ViewController: UIViewController, UITextFieldDelegate {
        @IBOutlet weak var yourTextField: UITextField!
    
        func textFieldDidBeginEditing(_ textField: UITextField) {
            // Your code here
        }
    
        override func viewDidLoad() {
            super.viewDidLoad()
            yourTextField.delegate = self
        }
    
        ...
    
    }