145 votes

Affichage d'un message dans iOS qui a la même fonctionnalité que Toast dans Android

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.

102voto

Amar Points 13103

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

enter image description here

95voto

Kirit Vaghela Points 3653
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)
}

55voto

Suragch Points 197

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.

enter image description here

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.

44voto

Hissain Points 880

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:

30voto

GedankenNebel Points 2067

Swift 3

Pour une solution simple sans code tiers :

enter image description here

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 :

  1. Android comme message Toast
  2. Look&Feel de l'IOS

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X