对textFieldDidEndEditing采取行动

时间:2013-01-12 18:43:47

标签: ios objective-c cocoa-touch

当以下文本字段在代码的第二部分

中收到条件时,我想要一个警报
self.circuit.rcdAtIan = [ICUtils nonNilString:self.rcdAtIan.text];
self.circuit.rcdAt5an = [ICUtils nonNilString:self.rcdAt5an.text];

上面的代码工作正常,所以现在我需要解雇它。使用下面的方法是我的第一个想法,但是在每次键盘辞职时都会触发警报。我只希望警报显示一次。

- (void)textFieldDidEndEditing:(UITextField *)textField {
    if ([_rcdAtIan.text intValue]> 200) {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Warning" message:@"my message" delegate:nil cancelButtonTitle: @"Ok" otherButtonTitles: nil];
        [alert show];     
    }

    if ([_rcdAt5an.text intValue]> 40) {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Warning" message:@"my message" delegate:nil cancelButtonTitle: @"Ok" otherButtonTitles: nil];
        [alert show];
    }
}

我想也许我需要一个NSUserDefaults的布尔?但不知道如何实现它来检查是否已显示警报。通常情况下,如果我想要显示一次警报

 if (![@"1" isEqualToString:[[NSUserDefaults standardUserDefaults] objectForKey:@"alert"]]){
    [[NSUserDefaults standardUserDefaults] setValue:@"1" forKey:@"alert"];
    [[NSUserDefaults standardUserDefaults] synchronize];
    [alert show];

}

然而,在这种情况下,当重新加载页面时,我希望再次显示警报,并且在任何情况下我都不确定这是否是解决此问题的有效方法

2 个答案:

答案 0 :(得分:1)

“你曾经”究竟是什么意思?每个应用运行一次,每个编辑步骤一次?

或者只是添加两个可以随时重置的BOOL标志,只需

即可
- (void)textFieldDidEndEditing:(UITextField *)textField {
  if ([_rcdAtIan.text intValue]> 200 && !alert1shown) {
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Warning" message:@"my message" delegate:nil cancelButtonTitle: @"Ok" otherButtonTitles: nil];
    alert1shown = YES;
    [alert show];
  }

  if ([_rcdAt5an.text intValue]> 40 && !alert2shown) {
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Warning" message:@"my message" delegate:nil cancelButtonTitle: @"Ok" otherButtonTitles: nil];
    alert2shown = YES;
    [alert show];
  }
}

答案 1 :(得分:1)

不要使用NSUserDefaults,这是不合适的

在你的@interface ......

    @property (assign) BOOL freshAlert1;
    @property (assign) BOOL freshAlert2;

然后是这样的......(假设“页面重新加载”等同于你的viewController返回屏幕)

- (void)viewDidAppear
{
     self.freshAlert1 = YES;
     self.freshAlert2 = YES;

}

if (([_rcdAtIan.text intValue]> 200) && self.freshAlert1) {
    self.freshAlert1 = NO;
    ...
   }

 if (([_rcdAt5an.text intValue]> 40) && self.freshAlert2) {
    self.freshAlert2 = NO;

     ...
     }