【问题标题】:Enabling button if I write in TextField如果我在 TextField 中写入,则启用按钮
【发布时间】:2012-12-20 05:46:53
【问题描述】:

当您在 TextField 中写入内容时,我在启用按钮时遇到了一些问题。 如果 TextField 中没有任何内容,我将其禁用,但当您在其中写入内容时,我无法再次启用它。

我有这样的事情:

- (void)viewDidLoad {
    [super viewDidLoad];

    NSUInteger textLength = [_Name.text length];
    [_doneButton setEnabled:(textLength > 0)];

}

【问题讨论】:

    标签: ios uibutton uitextfield


    【解决方案1】:

    将委托设置为 UITextField 并在 ViewDidLoad 中创建一个用于文本更改的方法,如下所示。

    [self.textFieldTemp addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged];
    

    并添加方法如下。

    - (void)textFieldDidChange:(UITextField *)textField {
        if(textField == self.textFieldTemp) 
            self.buttonTemp.enabled = ([self.textFieldTemp.text length] > 0) ? YES : NO; }
    

    【讨论】:

    • 这是最好的解决方案。其他答案在某些情况下不起作用,例如输入 1 个字符时。但是这个很到位。
    • 我认为这是最好的解决方案。如果您有许多 UITextFields 的状态可能决定是否应启用按钮,例如用户名和密码对,则特别有用
    【解决方案2】:

    试试这个

    - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    if([textField.text length]>0){
        [doneButton setEnabled:YES];        
    
    }
    else{
     [doneButton setEnabled:NO ;
    }
    

    希望这可能对您有所帮助..

    【讨论】:

    • 这需要放在shouldChangeCaractersInRange:(NSRange)中放置在viewDidLoad中只会在页面加载时被调用一次,然后再也不会被调用。
    • @SKM,我尝试了您的代码,但没有成功。我应该为此添加更多调整吗?
    • @Santiago,你是怎么做到的?请告诉我,谢谢。
    • 这不是解决方案。当textField:shouldChangeCharactersInRange:replacementString: 被调用时,文本还没有改变,因此名称的“应该”部分。如果您检查[textField.text stringByReplacingCharactersInRange:range withString:string] 的长度,它将起作用。但是你应该只检查你是否会返回YES
    【解决方案3】:

    使用UITextField 委托方法再次启用您的按钮。当您的textField 字符发生更改时,将调用委托方法,请在此处启用您的按钮。

    - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
         _doneButton.enabled = YES;
    }
    

    【讨论】:

    • 不,没有任何改变,我仍然遇到同样的问题
    【解决方案4】:

    将这些行放在文本字段委托方法中:

    - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    

    然后就可以了。每次在文本字段中输入字符时都会调用此方法。但 ViewDidLoad 仅在加载视图控制器时调用。

    希望它对你有用。

    【讨论】:

      【解决方案5】:

      这两个函数将根据你的文本字段中的文本启用和禁用你的按钮

      - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
           _doneButton.enabled = YES;
      }
      - (BOOL)textFieldShouldEndEditing:(UITextField *)textField{
      if([textField.text length]>0){
         [doneButton setEnabled:YES];        
      }
      else{
       [doneButton setEnabled:NO ;
      }
      

      【讨论】:

        【解决方案6】:

        您可以像这样使用 UITextField 的委托来启用和禁用按钮。

        - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
        {
        if (textField.text.length!=0)
        {
        yourButton.enabled = YES;
        }
        else
        {
        yourButton.enabled = NO;
        }
        }
        

        【讨论】:

          【解决方案7】:

          我使用的方法根本没有使用委托。我在控制器类中创建了这个方法:

          - (IBAction)textFieldChanged:(id)sender
          {
              self.doneButton.enabled = ([self.Name.text length] > 0) ? YES : NO;
          }
          

          然后,在 Interface Builder 中,我将文本字段“Editing Changed”操作设置为针对新方法。然后,类似于@Paramasivan Samuttiram,我在viewDidLoad: 中添加了一个额外的调用。

          [self textFieldChanged:self.Name];
          

          该部分允许按钮最初处于正确状态。

          【讨论】:

            猜你喜欢
            • 2018-11-28
            • 1970-01-01
            • 2021-03-23
            • 2017-09-02
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-07-10
            相关资源
            最近更新 更多