J'ai besoin de savoir s'il existe une méthode dans iOS qui se comporte comme les messages Toast dans Android. C'est-à-dire que j'ai besoin d'afficher un message qui s'efface automatiquement après quelques secondes. Cette fonctionnalité est similaire à celle de la classe Toast dans l'environnement Android.
Réponses
Trop de publicités?Vous pouvez utiliser MBProgressHUD
projet.
Utiliser le mode HUD MBProgressHUDModeText
pour un comportement semblable à celui des toasts,
MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:self.navigationController.view animated:YES];
// Configure for text only and offset down
hud.mode = MBProgressHUDModeText;
hud.label.text = @"Some message...";
hud.margin = 10.f;
hud.yOffset = 150.f;
hud.removeFromSuperViewOnHide = YES;
[hud hideAnimated:YES afterDelay:3];
NSString *message = @"Some message...";
UIAlertView *toast = [[UIAlertView alloc] initWithTitle:nil
message:message
delegate:nil
cancelButtonTitle:nil
otherButtonTitles:nil, nil];
[toast show];
int duration = 1; // duration in seconds
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, duration * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
[toast dismissWithClickedButtonIndex:0 animated:YES];
});
Utilisation de UIAlertViewController pour iOS 9 ou ultérieur
NSString *message = @"Some message...";
UIAlertController *alert = [UIAlertController alertControllerWithTitle:nil
message:message
preferredStyle:UIAlertControllerStyleAlert];
[self presentViewController:alert animated:YES completion:nil];
int duration = 1; // duration in seconds
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, duration * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
[alert dismissViewControllerAnimated:YES completion:nil];
});
Swift 3.2
let message = "Some message..."
let alert = UIAlertController(title: nil, message: message, preferredStyle: .alert)
self.present(alert, animated: true)
// duration in seconds
let duration: Double = 5
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + duration) {
alert.dismiss(animated: true)
}
Dans Android, un Toast est un court message qui s'affiche à l'écran pendant un court laps de temps, puis disparaît automatiquement sans perturber l'interaction de l'utilisateur avec l'application.
Ainsi, beaucoup de personnes venant d'un environnement Android veulent savoir ce qu'est la version iOS d'un Toast. Outre la question actuelle, on peut trouver d'autres questions similaires aquí , aquí y aquí . La réponse est que il n'y a pas d'équivalent exact à un Toast dans iOS . Diverses solutions de contournement ont cependant été présentées, notamment
- faire son propre Toast avec un
UIView
(voir aquí , aquí , aquí y aquí ) - l'importation d'un projet tiers qui imite un Toast (voir aquí , aquí , aquí y aquí )
- en utilisant un Alert sans bouton avec une minuterie (voir aquí )
Cependant, je vous conseille de vous en tenir aux options d'interface utilisateur standard déjà fournies avec iOS. N'essayez pas de faire en sorte que votre application ait exactement la même apparence et le même comportement que la version Android. Réfléchissez à la manière de la reconditionner pour qu'elle ressemble à une application iOS. Voir le lien suivant pour quelques choix.
Envisagez de redessiner l'interface utilisateur de manière à transmettre les mêmes informations. Ou, si l'information est très importante, alors une Alerte pourrait être la réponse.
Swift 4
Que pensez-vous de ce petit truc ?
func showToast(controller: UIViewController, message : String, seconds: Double) {
let alert = UIAlertController(title: nil, message: message, preferredStyle: .alert)
alert.view.backgroundColor = UIColor.black
alert.view.alpha = 0.6
alert.view.layer.cornerRadius = 15
controller.present(alert, animated: true)
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + seconds) {
alert.dismiss(animated: true)
}
}
Exemple d'appel :
showToast(controller: self, message : "This is a test", seconds: 2.0)
Output:
Swift 3
Pour une solution simple sans code tiers :
Il suffit d'utiliser un UIAlertController normal mais avec un style = feuille d'action (voir le code ci-dessous)
let alertDisapperTimeInSeconds = 2.0
let alert = UIAlertController(title: nil, message: "Toast!", preferredStyle: .actionSheet)
self.present(alert, animated: true)
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + alertDisapperTimeInSeconds) {
alert.dismiss(animated: true)
}
L'avantage de cette solution :
- Android comme message Toast
- Look&Feel de l'IOS
- Réponses précédentes
- Plus de réponses