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

ich den alerview dimiss will, nachdem es seit einiger Zeit ist zeigt, aber wenn die Alertview keine Taste haben, funktioniert es nicht, wenn ich -dismissWithClickedButtonIndex:animated: method und- performSelector:withObject:afterDelay: aufgerufen gibt es eine andere Möglichkeit, es zu entlassen? danke für irgendwelche Ideen!Gibt es eine Möglichkeit, eine UIalertView ohne Schaltfläche nach einiger Zeit zu schließen?

Antwort

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

die it.i es ist fix

+3

nette Arbeit .... aber ich würde vorschlagen, dass Sie Artikel schreiben oder Ihren eigenen Blog schreiben – Azhar

+2

Ben, wenn der cancelButton der alertView auf "nil" gesetzt ist, wie wird das "[alertView ablehnenWithClickedButtonIndex: 0 animiert: JA] " Ding Arbeit ??? Ich habe es versucht und es hat funktioniert, aber kann nicht herausfinden, wie ... Jede Hilfe wird geschätzt! Vielen Dank! – Balaram

+0

wunderbar wirklich ein großartiges ... Tnx –

1

In Xamarin.iOS/Monotouch für mich gearbeitet:

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

dass Denken Sie daran, wenn ein asynchrones Verfahren ist aus einem Hintergrund-Thread genannt (nicht die Haupt-UI-Thread), dann wäre InvokeOnMainThread immer noch erforderlich. Diese nur bedeutet, dass Sie das oben beschriebene Verfahren wie folgt aufrufen:

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

Update auf die Antwort, wie oben UIAlertView ist deprecated Answer At this Link

die zweite Funktion wie diese

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

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

Verwenden 10 Sekunden Verzögerungen zu entlassen

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