0

当以下文本字段收到代码第二部分中的条件时,我想要一个警报

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

}

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

4

2 回答 2

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];
  }
}
于 2013-01-12T18:54:12.127 回答
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;

     ...
     }
于 2013-01-12T18:54:56.637 回答