Есть ли способ уволить без кнопки UIalertView через некоторое время? - PullRequest
13 голосов
/ 16 ноября 2010
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"tittle"
               message:@""
                 delegate:self
              cancelButtonTitle:@""
              otherButtonTitles:nil];
  [alertView show];
  [alertView release];

Я хочу затемнить представление алертов после того, как оно показывается в течение некоторого времени, но когда в окне предупреждений нет кнопки, оно не будет работать, если я вызвал -dismissWithClickedButtonIndex:animated: method и - performSelector:withObject:afterDelay: есть ли другой способ отклонить это? спасибо за любые идеи!

Ответы [ 4 ]

26 голосов
/ 16 ноября 2010
-(void)xx  {
     [self performSelector:@selector(dismissAlertView:) withObject:alertView afterDelay:2];
}
-(void)dismissAlertView:(UIAlertView *)alertView{
    [alertView dismissWithClickedButtonIndex:0 animated:YES];
}

Вот и все. Я исправлю это

2 голосов
/ 09 июня 2016

Используйте 10 секунд задержки для отклонения

UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"" message:@"" preferredStyle:UIAlertControllerStyleAlert];
[self presentViewController:alertController animated:YES completion:nil];

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(10.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
    [alertController dismissViewControllerAnimated:YES completion:^{
        p\Perform Action after dismiss alertViewController
    }];
});
1 голос
/ 16 февраля 2016

В Xamarin.iOS / Monotouch это сработало для меня:

private async Task ShowToast(string message, UIAlertView toast = null)
    {
        if (null == toast)
        {
            toast = new UIAlertView(null, message, null, null, null);
            toast.Show();
            await Task.Delay(2000);
            await ShowToast(message, toast);
            return;
        }

        UIView.BeginAnimations("");
        toast.Alpha = 0;
        UIView.CommitAnimations();
        toast.DismissWithClickedButtonIndex(0, true);
    }

Помните, что если асинхронный метод вызывается из фонового потока (а не из основного потока пользовательского интерфейса), то InvokeOnMainThread все равно потребуется Это просто означает, что вы вызываете вышеуказанный метод следующим образом:

 BeginInvokeOnMainThread(() =>
 {
   ShowToast(message);
 });
0 голосов
/ 06 апреля 2016

обновить до ответа выше как UIAlertView is deprecated Ответ По этой ссылке

2-я функция должна быть такой

-(void)dismissAlertView:(UIAlertController *)alertView{

  [alertView dismissViewControllerAnimated:YES completion:nil];
}
...