addTarget方式和UITextFieldDelegate方式监听文本框浅析

如图所示:

addTarget方式和UITextFieldDelegate方式监听文本框浅析_第1张图片

  • 在开发中,一般都要监听账号对应的输入文本框和密码对应的文本框同时有值,才能让登录按钮可以点击,这个时候就有两种办法了,一种是通过UITextFieldDelegate方法监听,一种是通过addTarget方法监听,可能大多数人有和笔者相同的疑问,是不是都可以呢?那么笔者通过实验来说明情况:

  • 首先通过UITextFieldDelegate方式监听

    //当账号与密码同时有值,登录按钮才能够点击
    self.accountTextF.delegate = self;
    self.pwdTextF.delegate = self;

    点击文本框的时候会自动调用该方法
    //是否允许改变文字.
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {

    NSLog(@"accountTextF==%@",self.accountTextF.text);
    NSLog(@"----%@",string);
    if (self.accountTextF.text.length && self.pwdTextF.text.length) {
        self.loginBtn.enabled = YES;
    }else {
        self.loginBtn.enabled = NO;
    }

    return YES;
}

  • 上面笔者把账号对应的属性里面保存的值self.accountTextF.text,和string的值打印了一下,如图所示,
addTarget方式和UITextFieldDelegate方式监听文本框浅析_第2张图片

  • 细心的读者可能已经发现了,值不一样,不同步,self.accountTextF.text的值比string的值慢了一拍,这样就不行了,为什么因为如果我通过每个文本框的长度去判断有没有值的时候,比如我就在账号文本框里面输入了一个字符a,按道理,我的账号文本框的长度应该是1,可是刚刚通过打印,发现长度应该是0,那么在里面进行一些逻辑业务的判断是错误的,好了,接下来看addTarget方式

  • 通过addTarget方式监听

[self.accountTextF addTarget:self action:@selector(textChange) forControlEvents:UIControlEventEditingChanged];
[self.pwdTextF addTarget:self action:@selector(textChange) forControlEvents:UIControlEventEditingChanged];

//当文本内容改变时调用
- (void)textChange
{
     NSLog(@"accountTextF==%@",self.accountTextF.text);
    //当账号与密码同时有值,登录按钮才能够点击
    self.loginBtn.enabled = self.accountTextF.text.length && self.pwdTextF.text.length;

}

效果图片:

addTarget方式和UITextFieldDelegate方式监听文本框浅析_第3张图片

看到没有,账号文本框中输入一个字符a,控制台就打印一个字符a,两者保持同步,所以在里面进行一些逻辑业务的判断,没有问题,所以最终结论是,只能用addTarget方式,不能用UITextFieldDelegate方式,谢谢大家

你可能感兴趣的:(addTarget方式和UITextFieldDelegate方式监听文本框浅析)