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

voglio dimiss l'alerview dopo che è mostrando per qualche tempo, ma quando l'alertview non ha pulsanti, non funziona se ho invocato -dismissWithClickedButtonIndex:animated: method e- performSelector:withObject:afterDelay: c'è qualche altro modo per respingerlo? grazie per qualsiasi idea!C'è un modo per ignorare un pulsante senza UIalertView dopo un po 'di tempo?

risposta

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

che è it.i fissarlo

+3

bel lavoro .... ma ti suggerisco di scrivere un articolo o di creare il tuo blog – Azhar

+2

Ben, se il cancelButton dell'avvisoView è impostato su "nil", come sarà il "[alertView dismissWithClickedButtonIndex: 0 animato: YES] ;" cosa funziona ??? L'ho provato e ha funzionato, ma non riesco a capire come .... Qualsiasi aiuto è apprezzato! Grazie! – Balaram

+0

meraviglioso davvero un grande..tnx –

1

In Xamarin.iOS/MonoTouch questo ha funzionato per me:

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

ricordare che se un metodo asincrono viene chiamato da un thread in background (non il main UI thread) quindi InvokeOnMainThread sarebbe ancora richiesto. Questo significa solo che si chiama il metodo di cui sopra in questo modo:

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

aggiornamento alla risposta di cui sopra come UIAlertView è deprecated Answer At this Link

la 2 ° funzione dovrebbe essere come questo

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

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

Usa 10 secondi di ritardo per respingere

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