当取消按钮被按下时覆盖textFieldShouldEndEditing函数

4

我有一个详情视图,其中包含许多字段,其中一些使用textFieldShouldEndEditing来进行一些验证。这一切都很顺利。然而,如果用户在字段中输入无效数据,然后按下取消按钮,验证程序仍然运行,因为textFieldShouldEndEditing被调用。有没有办法防止这种情况发生?换句话说,只是得到一个干净的取消,因为我不关心该字段包含什么。


请你详细地在此处放置你的代码,这样我们可以理解你的意思!!! - iDhaval
2个回答

1

在取消按钮函数内部

清除您当前的textfield文本。textfield.text=@"";

最初检查textFieldShouldEndEditing

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

// check your condition here

}

1
Senthikumar的答案在那个特定情况下有效,但我遇到了类似的情况,我还需要检查该字段是否为空...
因此,我使用了以下技术:
1.我创建了一个名为“cancelButtonPressed”的BOOL属性 2.在与取消按钮链接的方法中,我将此BOOL设置为YES 3.在textViewShouldEndEditing中,我首先检查此BOOL。如果它是NO,我就进行控件操作(包括警报视图等)。这个方法应该始终以结束,这意味着如果这个“cancelButtonPressed”BOOL是YES,它应该结束文本框编辑(而不是对我的面孔进行警报)。
此外(这与问题无直接关系,但通常与“取消”功能一起出现),您可能还有一个“保存”按钮,在这种情况下,如果您正在编辑一个textField并且条目不正确,则希望防止用户保存。
在这种情况下,我创建另一个名为“textFieldInError”的BOOL,并将其设置为YES,如果我的textViewShouldEndEditing中的控件失败,并在控件成功时将其设置为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];
}

我希望能以简洁明了的方式解决这个问题,从而帮助其他人。Fred

谢谢你,Fred。你的帮助让我至少有了一个人可以依靠。这是一个不错且简单的解决方案。 - MortalMan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接