• iOS TextField内容为空时设置按钮为不可用


    TextField内容为空时设置按钮为不可用, 也可通过通知或代理实现。 但是用代理实现时, 存在一个Bug: 用户在输入文本首字段时, 进行回删操作后输出(如“shuai” -> "shu"), 按钮依旧为不可用,同时若嫌通知或代理实现过于繁琐,也可通过addTarget:action:forControlEvents:方法实现以上需求, 具体设置如下:

    1. 通知:

    设置通知监听者及对象:

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textDidChanged) name:UITextFieldTextDidChangeNotification object:self.textField];

    实现通知方法:

    - (void)textDidChanged
    {
        self.customButton.enabled = self.textField.text.length > 0;;
    }

    移除通知监听者:

    - (void)dealloc
    {
        [[NSNotificationCenter defaultCenter] removeObserver:self];
    }

    2. 代理(存在首字段回删操作后输出, 按钮不可用):

    遵守协议:

    @interface CustomViewController () <UITextFieldDelegate>

    设置代理:

    self.textField.delegate = self;

    实现代理方法:

    - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range
    replacementString:(NSString *)string
    {
        NSMutableString *newText = [self.textField.text mutableCopy];
    
        [newText replaceCharactersInRange:range withString:string];
        
        self.customButton.enabled = newText.length > 0;
        
        return YES;
    }

    3. addTarget:action:forControlEvents:

    为TextField添加方法:

    [self.textField addTarget:self action:@selector(textDidChanged:) forControlEvents:UIControlEventEditingChanged];

    方法实现:

    - (void)textDidChanged:(UITextField *)textField
    {
        self.customButton.enabled = textField.text.length > 0;
    }
  • 相关阅读:
    一个网站架构的变迁
    网络编程
    http协议篇
    第1篇 编程能力是什么
    django中的cookies和session机制
    django的认证与授权系统
    python的异常处理
    第0篇
    mysql优化和全局管理杂记
    k8s中pod的资源配置详解
  • 原文地址:https://www.cnblogs.com/happyplane/p/4728826.html
Copyright © 2020-2023  润新知