zoukankan      html  css  js  c++  java
  • 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;
    }
  • 相关阅读:
    C#基础
    进制转换
    养猪和存储空间
    独热码和二进制码
    mux_xz
    饮料机
    亚稳态
    mos管功耗
    功能覆盖率和代码覆盖率
    时序逻辑电路输出特点
  • 原文地址:https://www.cnblogs.com/happyplane/p/4728826.html
Copyright © 2011-2022 走看看