addTarget方式和UITextFieldDelegate方

作者: Z了个L | 来源:发表于2016-02-22 01:22 被阅读3230次

如图所示:

  • 在开发中,一般都要监听账号对应的输入文本框和密码对应的文本框同时有值,才能让登录按钮可以点击,这个时候就有两种办法了,一种是通过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的值打印了一下,如图所示,

  • 细心的读者可能已经发现了,值不一样,不同步,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;

}

效果图片:


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

相关文章

网友评论

  • 闲云悠鹤蝶恋舞:使用这个方法- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 是可以监听到的,把textField.text和string拼接在一起就可以了
  • subvertWuxu:想指出一点,shouldChangeCharactersInRange这个方法的功能是“是否允许改变文字”,苹果提供这个方法是想让你获得用户准备输入的文字,然后判断当前输入是否被允许,也就是说在进入这个回调的时候,文字并没有被实际写入输入框。比如你不希望用户输入“&”这个字符,那么你就可以在这个方法中截获字符并做判断返回NO,此时用户的输入就失败了。所以如果你是想拿到最后的输入结果,那么使用这个方法是不恰当的。另外,你可以试试直接利用set的方法修改内容,会发现以上两种方法都是失效的,需要利用KVO来监听输入。
    Z了个L:@subvertwuxu 说的很实用, :blush:
  • 05928c0c7c63:完全可以在登录按钮里做逻辑判断呀,为什么要在这判断
    05928c0c7c63: @Z了个L 好的,
    Z了个L:@樱空释的爱1 一开始两个文本框里面没有值的时候,按钮一开始是设置为不能够点击的,只有两个文本框同时有值的时候,让按钮可以被点击,接下来就可以在按钮里做一些逻辑业务了,比如匹配账户和密码是否相等 :blush:
  • 花前月下:早就知道了。:joy::joy::joy:
    花前月下:@Z了个L 不敢当不敢当。 我只是个小菜。 感谢你的分享。
    Z了个L:@花前月下 献丑了,就是把自己理解的发表出来,如果懂了说明阁下比我厉害哦,小编还要向你学习

本文标题:addTarget方式和UITextFieldDelegate方

本文链接:https://www.haomeiwen.com/subject/iccbkttx.html