检测UITextField的焦点更改
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了检测UITextField的焦点更改相关的知识,希望对你有一定的参考价值。
我正在尝试设置视图的动画,当键盘隐藏并显示为文本字段时向上移动,我让它完美地工作,但是当焦点从一个文本字段移动到另一个文本字段时,它不起作用因为键盘已经显示出来了。
在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)textFieldDidBeginEditing:(UITextField *)textField;
将被解雇..当它失去焦点时,- (void)textFieldDidEndEditing:(UITextField *)textField;
将被解雇。
另一答案
-(BOOL)textFieldShouldBeginEditing:(UITextField*)textField {
if (textField.tag == 1) { //first textField tag
//textField 1
}
else {
//textField 2
}
}
另一答案
使用UITextFieldDelegate
和
func textFieldDidBeginEditing(textField: UITextField) {
println("did")
if textField.tag == 1{
self.txtFullName.layer.borderColor = UIColor.blueColor().CGColor
}
}
另一答案
在快速4:
- 将
UITextFieldDelegate
实施到你的ViewController
课程中 - 为要检测焦点的
textFields
添加Outlets - 实现函数
textFieldDidBeginEditing
(如果您希望收到有关该特定操作的通知,请参阅Apple's documentation)并填写代码 - 在
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
}
...
}
以上是关于检测UITextField的焦点更改的主要内容,如果未能解决你的问题,请参考以下文章
当 UITextField 获得焦点时,从 UITableViewCell 继承类中更改 UITableViewCell 的高度