2010-11-16 22 views
13
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"tittle" 
       message:@"" 
       delegate:self 
       cancelButtonTitle:@"" 
       otherButtonTitles:nil]; 
    [alertView show]; 
    [alertView release]; 

je veux le alerview après avis de rejeter cela montrant pendant un certain temps, mais quand le alertview n'a pas de bouton, il ne fonctionne pas si j'invoquais -dismissWithClickedButtonIndex:animated: method et- performSelector:withObject:afterDelay: est-il une autre façon de le rejeter? merci pour vos idées!Existe-t-il un moyen de supprimer un bouton UIalertView après un certain temps?

Répondre

26
-(void)xx { 
    [self performSelector:@selector(dismissAlertView:) withObject:alertView afterDelay:2]; 
} 
-(void)dismissAlertView:(UIAlertView *)alertView{ 
    [alertView dismissWithClickedButtonIndex:0 animated:YES]; 
} 

qui est it.i le fixer

+3

beau travail .... mais je vous suggère d'écrire l'article ou faire votre propre blog – Azhar

+2

Ben, si le cancelButton de l'alertView est réglé sur "nil", comment va le "[alertView dismissWithClickedButtonIndex: 0 animé: OUI] " chose travail ??? J'ai essayé cela et cela a fonctionné, mais je n'arrive pas à comprendre comment ... Toute aide est appréciée! Je vous remercie! – Balaram

+0

merveilleux vraiment un très bon..tnx –

1

Dans Xamarin.iOS/MonoTouch cela a fonctionné pour moi:

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); 
    } 

Rappelez-vous que si une méthode async est appelée à partir d'un fil d'arrière-plan (pas thread principal de l'interface utilisateur), InvokeOnMainThread est toujours requis. Cela signifie simplement que vous appelez la méthode ci-dessus comme ceci:

BeginInvokeOnMainThread(() => 
{ 
    ShowToast(message); 
}); 
0

mise à jour à la réponse ci-dessus UIAlertView est deprecated Answer At this Link

la 2ème fonction doit être comme ça

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

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

Utilisation 10 secondes de retard pour rejeter

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