【问题标题】:Enable UIBarButtonItem if multiple UITextFields are all populated如果多个 UITextField 都已填充,则启用 UIBarButtonItem
【发布时间】:2010-04-14 18:31:35
【问题描述】:

我在一个分组的 UITableView 中有 3 个 UITextFields,我试图找出正确的逻辑,只有在没有一个 UITextFields 为空时才启用我的“保存”UIBarButtonItem。

我目前正在使用- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string UITextField 委托方法逐字符检测字段的更改,但它提供的结果不一致。

有什么想法吗?

编辑:这是我现在使用的代码。如您所见,我已将文本字段放入数组中,以便可以遍历它们。就像现在一样,在我在第三个字段中输入第二个字符之前,保存按钮不会启用。它还交替启用/禁用作为从字段中一个一个删除字符。

NSString *newString = [textField.text stringByReplacingCharactersInRange:range withString:string];

    BOOL allValid;

    if (newString.length)
    {
        // Cycle through array checking for completeness
        for (int i = 0; i < [textFieldArray count]; i++)
        {
            if ([[[textFieldArray objectAtIndex:i] text] length] > 0)
            {
                allValid = YES;
                NSLog(@"TextField #%i Validates.", i);
            }
            else
            {
                allValid = NO;
                NSLog(@"TextField #%i Does Not Validate.", i);
            }
        }
    }
    else
    {
        NSLog(@"Invalid");
        allValid = NO;
    }

    if (allValid)
        [saveButton setEnabled:YES];
    else
        [saveButton setEnabled:NO];

    return YES;

【问题讨论】:

    标签: iphone cocoa-touch uitextfield uibarbuttonitem


    【解决方案1】:

    您究竟是如何使用该方法的?以下是我的做法:

    - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
      NSString *newString = [textField.text stringByReplacingCharactersInRange:range withString:string];
      if (newString.length) {
        //If all the others are also non-empty, enable your button
      }
      return YES;
    }
    

    但在用户按下回车键后启用按钮可能更有意义,这样更容易处理。只需在文本字段上使用 didEndEditingOnExit 或 didEndEditing 事件并检查它们是否为非空。

    【讨论】:

      【解决方案2】:

      好的,这就是我最后的做法。

      我创建了- (IBAction)validateFields:(id)sender 并将其连接到 UITextField 上的 Editing Changed 插座。看起来像这样。

      - (IBAction)validateFields:(id)sender
      {
          BOOL valid = YES;
      
          // On every press we're going to run through all the fields and get their length values. If any of them equal nil we will set our bool to NO.
          for (int i = 0; i < [textFieldArray count]; i++)
          {
              if (![[[textFieldArray objectAtIndex:i] text] length])
                  valid = NO;
          }
      
          [saveButton setEnabled:valid];
      }
      

      我给了它一个相当不错的尝试,但无法在任何空文本字段组合上启用保存按钮,所以我要说这是要走的路。

      【讨论】:

        猜你喜欢
        • 2020-09-06
        • 1970-01-01
        • 2019-08-02
        • 2019-11-27
        • 2018-05-13
        • 1970-01-01
        • 2020-04-07
        • 2017-04-07
        • 1970-01-01
        相关资源
        最近更新 更多