禁用按钮,直到输入文本字段?

can*_*boy 7 iphone validation objective-c uibutton uitextfield

我在视图中有几个uitextfields,我想禁用uibutton,直到所有字段都输入了一些内容.这样做的最佳方法是什么?理想情况下,我也想做一些基本的验证(确保所有条目都是数字).


编辑

无法让下面的解决方案完全奏效.下面是我工作的版本(由Brad,Mike和其他各种来源拼凑而成)

使用UITextFieldDelegate

在IB中创建文本字段,并附加到相关的IBOutlets - textField1,textField2等

在IB中创建并将按钮连接到其相关的IBOutlet(submitButton)和IBAction(submitAction).在IB中取消选中已启用.

在视图控制器中创建验证方法:

-(IBAction)validateTextFields:(id)sender
    {
        // make sure all fields are have something in them
        if ((textField1.text.length  > 0) && (textField2.text.length > 0)  && (textField3.text.length > 0)) {
            self.submitButton.enabled = YES;
        }
        else {
            self.submitButton.enabled = NO;
        }
    }
Run Code Online (Sandbox Code Playgroud)

将每个字段的"编辑已更改"事件连接到validateTextFields方法.(注意:'Value Changed'事件似乎不起作用)

使用此委托方法来限制字符(在我的情况下为数字,最多为一个句点).这一点来自Erica Sadun顺便说一句.

-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    NSCharacterSet *cs;
    NSString *filtered;
    // Check for period
    if ([textField.text rangeOfString:@"."].location == NSNotFound)
    {
        cs = [[NSCharacterSet characterSetWithCharactersInString:@"0123456789."] invertedSet];
        filtered = [[string componentsSeparatedByCharactersInSet:cs] componentsJoinedByString:@""];
        return [string isEqualToString:filtered];
    }
    // Period is in use
    cs = [[NSCharacterSet characterSetWithCharactersInString:@"0123456789"] invertedSet];
    filtered = [[string componentsSeparatedByCharactersInSet:cs] componentsJoinedByString:@""];
    return [string isEqualToString:filtered];
}
Run Code Online (Sandbox Code Playgroud)

瞧.

Bra*_*Guy 5

您将需要在管理视图的视图cOntroller中的所有文本字段上实现UITextFieldDelegate委托,确保在加载视图后验证文本字段:

-(void) viewDidLoad {
  textField1.delegate = self;  //Note if these were created in a xib, you can do this in IB
  textField2.delegate = self;
  [self validateTextFields];
}
Run Code Online (Sandbox Code Playgroud)

并实现textField:shouldChangeCharatersInRage:方法,以便每次textfileds更改时进行验证:

 - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
  [self validateTextFields];
  return YES;
}
Run Code Online (Sandbox Code Playgroud)

最后,根据需要进行实际验证并启用或禁用按钮:

-(void) validateTextFields {
  if ((textField1.text.length > 0) && textField2.text.length > 0)) {
    myUIButton.enabled = YES;
  }
  else {
    myUIButton.enabled = NO;
  }
}
Run Code Online (Sandbox Code Playgroud)