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;
    }
  • 相关阅读:
    题解 AT5228 【[ABC162A] Lucky 7】
    题解 P6467 【[COCI2008-2009#6] BUKA】
    2020 Codeforces 愚人节比赛题解 A~D
    题解 AT4251 【[ABC110A] Maximize the Formula】
    题解 AT5638 【November 30】
    题解 AT4164 【[ABC102A] Multiple of 2 and N】
    多项式全家桶
    烂题推荐
    NOIP 2020 游记
    P5048 题解
  • 原文地址:https://www.cnblogs.com/happyplane/p/4728826.html
Copyright © 2011-2022 走看看