背景:
有时候,我们想实时监听系统的UITextField控件输入的内容,使用UITextField的代理方法,有些不足之处。比如说,在登录界面,账号和密码输入框如果没有输入内容,那么登录按钮应该是不可选中状态。使用UITextField的代理方法,会多监听到一个\n的输入符号,导致我们不能实时监听输入内容,总会慢一个节拍。当然,\n输入符号是可以处理的,这里我们不选用处理\n的方法,而是采用另外两种监听方法。
监听方式一:
使用系统通知NSNotification
,实时UITextField
输入的内容。参考代码:
//根据输入框是否有内容,设置注册按钮是否可以点击
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textChange) name:UITextFieldTextDidChangeNotification object:nil];
/**
根据输入框的内容显示按钮的状态
*/
-(void)textChange{
self.ZFScrollView.registerBtn.enabled = (self.ZFScrollView.registerPhoneTextField.text.length && self.ZFScrollView.registerPasswordTextField.text.length);
self.ZFScrollView.loginBtn.enabled = (self.ZFScrollView.loginPhoneTextField.text.length && self.ZFScrollView.loginPasswordTextField.text.length);
}
监听方式二:
所幸是,UITextField
也有监听事件addTarget
,那么就使用监听事件。参考代码:
[self.stallName addTarget:self action:@selector(limitString:) forControlEvents:UIControlEventEditingChanged];
-(void)limitString:(UITextField *)textField
{
if (textField.text.length > 10) {
textField.text = [textField.text substringToIndex:10];
}
}