Проверьте, показывает ли UIAlertView

У меня есть метод, который отправляет данные HTTP и отображает UIAlertView, если существует ошибка. Если у меня будет несколько сообщений HTTP, то я покажу несколько UIAlertView для каждой ошибки.

Я хочу показать UIAlertView, только если не показывает другой UIAlertView. Как я могу определить это?

41
задан Cœur 10 January 2019 в 04:55
поделиться

2 ответа

Для объекта, который вызывает set ivar перед вызовом метода show в вашем UIAlertView.

...

if (!self.alertShowing) {
    theAlert = [[UIAlertView alloc] initWithTitle:title message:details delegate:self cancelButtonTitle:nil otherButtonTitles:@"Okay", nil];
    self.alertShowing = YES;
    [theAlert show];
}

...

Затем в вашем методе делегирования для управления предупреждениями установите для вашего флага ivar значение no:

- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex
{
  ...
      self.alertShowing = NO;
}

Если вы хотите, чтобы предупреждения отображались последовательно, я бы отправил уведомления, чтобы добавить каждое сообщение в очередь, а затем только забрать сообщение из очередь после закрытия предупреждения.

53
ответ дан 27 November 2019 в 00:06
поделиться

Если вы можете управлять другими видами предупреждений, проверьте свойство visible для каждого из них.


В iOS 6 или ранее при появлении предупреждения оно перемещается в _UIAlertOverlayWindow. Поэтому довольно хрупкий метод - перебрать все окна и проверить, есть ли какие-либо подвиды UIAlertView.

for (UIWindow* window in [UIApplication sharedApplication].windows) {
  NSArray* subviews = window.subviews;
  if ([subviews count] > 0)
    if ([[subviews objectAtIndex:0] isKindOfClass:[UIAlertView class]])
      return YES;
}
return NO;

Это недокументировано, поскольку зависит от внутренней иерархии представлений, хотя Apple не может жаловаться на это. Более надежный, но еще более недокументированный метод - проверить , имеет ли значение [_ UIAlertManager visibleAlert] ноль .

Эти методы не могут проверить, отображается ли UIAlertView из SpringBoard.

26
ответ дан 27 November 2019 в 00:06
поделиться