【问题标题】:disable a UIButton until there is text in the UITextField禁用 UIButton 直到 UITextField 中有文本
【发布时间】:2024-01-15 18:29:01
【问题描述】:

如何禁用 UIButton,直到 UITextField 中有文本。我的代码似乎不起作用。

    if ([nameTextField.text isEqualToString: @""]) {
            [myButton setEnabled:NO];
}

【问题讨论】:

标签: iphone objective-c ios uibutton uitextfield


【解决方案1】:

首先检查您的 UITextField 和 UIButton 是否与界面构建器 UITextField 和 UIButton 连接?

并在下面的方法中编写您的代码:

- (void)textFieldDidBeginEditing:(UITextField *)textField;

【讨论】:

    【解决方案2】:

    在分配时将其设置为禁用,然后使用带有条件的 textField 委托方法。

    -(void)textFieldDidBeginEditing:(UITextField *)textfield {
     if(yourButton isEqual:@"") {
        yourButton.enabled = NO;
     }else {
        your.enabled = YES;
     }
    

    }

    【讨论】:

      【解决方案3】:

      应该这样做。试试这个,

      if ([nameTextField.text isEqualToString: @""] == TRUE) {
          [myButton setEnabled:NO];
      }
      

      【讨论】:

        【解决方案4】:

        这是来自kingthong's blog post 的代码,它对我有用:

        - (void)viewDidLoad
        {
            [super viewDidLoad];
            [self.saveButton setEnabled:NO];
        
            [[self myTextField] becomeFirstResponder];
            [myTextField addTarget:self 
                            action:@selector(textFieldDidChange)
                  forControlEvents:UIControlEventEditingChanged];
        }
        
        - (void)textFieldDidChange
        {
            if ([self.myTextField.text isEqualToString:@""]) {
                [self.saveButton setEnabled:NO];
            }
            else {
                [self.saveButton setEnabled:YES];
            }
        }
        

        【讨论】:

        • 优秀的答案,我能找到的最好的答案!
        【解决方案5】:

        我会仔细检查以确保输入了 if 语句 - 有时事情可能会有点棘手。

        获得类似结果的另一种方法是使用以下方法。

        – addTarget:action:forControlEvents:
        – removeTarget:action:forControlEvents:
        

        【讨论】:

          【解决方案6】:

          保持按钮禁用。实现 UITextFieldDelegate 并实现方法:

          - (void)textFieldDidBeginEditing:(UITextField *)textField;       
          

          检查textField中文本的长度,如果大于0,则启用按钮。

          【讨论】:

          • 这对我不起作用(我的文本字段一开始是第一响应者,所以它从未被调用过)。此外,当用户输入文本然后将其全部删除时,它也不起作用。我使用了@kingthong 博客文章中的代码来完成这项工作(代码如下)。
          【解决方案7】:

          首先禁用按钮,然后使用:

          if (![nameTextField.text isEqualToString: @""]) {
                      [myButton setEnabled:YES];
          }
          

          【讨论】: