如果已填充多个UITextField,则启用UIBarButtonItem

时间:2010-04-14 18:31:35

标签: iphone cocoa-touch uitextfield uibarbuttonitem

我在分组的UITableView中有3个UITextFields,并且我试图找出正确的逻辑,只有当UITextFields都没有空时才启用我的'Save'UIBarButtonItem。

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

有什么想法吗?

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

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;

2 个答案:

答案 0 :(得分:0)

你究竟是如何使用这种方法的?我就是这样做的:

- (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事件,然后检查它们是否为非空。

答案 1 :(得分:0)

好的,我最终是这样做的。

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

- (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];
}

我已经给它一个相当不错的去,并且无法获得保存按钮以启用任何空文本字段的组合,因此我将说这是要走的路。