Iphone 检测UITextField的焦点更改
当键盘隐藏和显示文本字段时,我尝试将视图的动画设置为向上移动,我使其工作得非常好,但当焦点从一个文本字段移动到另一个文本字段时,它不工作,因为键盘已经显示 在viewDidLoad中,我注册了以下内容: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
[[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
}
...
}