4

我有一个包含许多字段的详细视图,其中一些使用 textFieldShouldEndEditing 进行一些验证。这一切都很好。但是,如果用户在字段中输入无效数据然后按下取消按钮,则验证例程仍会在调用 textFieldShouldEndEditing 时运行。有没有办法防止这种情况?换句话说,只需彻底取消,因为我不在乎该字段包含什么。

4

2 回答 2

1

在取消按钮功能内清除您当前的 textfield.text=@"";

最初检查 textFieldShouldEndEditing

if  ([textfield.text isEqualtoEmpty:@""] 
{
return Yes;
}
else{

// check your condition here

}
于 2012-06-20T13:26:26.590 回答
1

Senthikumar 的答案在这种特殊情况下有效,但我有一个类似的情况,我需要检查该字段是否也不是空的......

因此我使用了以下技术:

  1. 我创建了一个名为“cancelButtonPressed”的 BOOL 属性
  2. 在链接到取消按钮的方法中,我将此 BOOL 设置为 YES
  3. textViewShouldEndEditing中,我首先检查了这个 BOOL。如果不是,我会进行控制(例如,包括警报视图)。此方法应始终通过调用return YES 来完成;,这意味着如果这个 "cancelButtonPressed" BOOL 为 YES,它应该结束文本字段编辑(并且不会向我的脸抛出警报)。

此外(这与问题没有直接联系,但它通常带有“取消”功能),您可能还有一个“保存”按钮,在这种情况下您想阻止用户保存,如果您正在编辑一个textField 和输入不正确。
在这种情况下,我创建另一个名为“textFieldInError”的 BOOL,如果我在 textViewShouldEndEditing 中的控件失败,则将其设置为 YES,如果我的控件成功(在方法结束时),则将其设置为 NO。然后,在链接到我的保存按钮的方法中,我检查该 BOOL 是否为 NO。

这是完整的代码:

  @property (nonatomic) BOOL cancelButtonPressed;
  @property (nonatomic) BOOL textFieldInError;


  - (BOOL)textFieldShouldEndEditing:(UITextField *)textField
  {
    // If the user pressed Cancel, then return without checking the content of the textfield
    if (!self.cancelButtonPressed) {

       // Do your controls here
       if (check fails) {
            UIAlertView *av = [[UIAlertView alloc] initWithTitle:@"Error"
                                                         message:@"Incorrect entry"
                                                        delegate:nil
                                               cancelButtonTitle:@"OK"
                                               otherButtonTitles:nil];
            [av show];

            // Prevent from saving
            self.textFieldInError = YES;

            return NO;
       }
    }

    // Allow saving
    self.textFieldInError = NO;

    return YES;
}

保存和取消方法:

- (void)saveButtonPressed;
{
   // Resign first responder, which removes the decimal keypad
   [self.view endEditing:YES];

   // The current edited textField must not be in error
   if (!self.textFieldInError) {
      // Do what you have to do when saving
   }
}

- (void)cancel;
{
    self.cancelButtonPressed = YES;

    [self.presentingViewController dismissViewControllerAnimated:YES completion:nil];
}

我希望这可以帮助其他人,因为我很头疼以一种干净、直接的方式解决这个问题。

弗雷德

于 2014-01-03T11:58:59.167 回答