30 votes

Comment afficher un message popup temporaire sur iPhone/iPad/iOS

Je voudrais afficher un message temporaire sur l'iPhone/iPad de l'affichage de la confirmation d'une action, ou de certains d'état rapide sur certains arrière-plan de l'activité.

Est-il une norme de contrôle pour ce faire? J'ai vu des applications de ce faire. Un rectangle arrondi, sombre et partiellement transparent avec du texte à l'intérieur. Il ne demande pas la saisie de l'utilisateur, mais disparaît sur son propre dans une brève période de temps. Android dispose d'une semblable construction qui est la norme. Également similaire à la windows affichés par Grogner.

Suggestions apprécié.

16voto

Joe Masilotti Points 920

Il ya une bibliothèque d'utilisateurs sur cocoacontrols.com qui émule les pop-ups Toast Android-style. C'est peut-être ce que vous cherchez.

http://cocoacontrols.com/platforms/ios/controls/altoastview

Il y a aussi celui-ci qui suit la même idée.

http://cocoacontrols.com/platforms/ios/controls/itoast

15voto

Marco Mustapic Points 3327

Créer une classe qui hérite de l' UIAlertView. Dans votre constructeur juste appelez - [super init] , puis ajouter tout point de vue que vous voulez comme un sous-vue. Vous pouvez même conception de ce point de vue dans Interface Builder. Quelque chose comme ceci:

- (id)initWithMessage:(NSString *)message dismissAfter:(NSTimeInterval)interval
{
  if ((self = [super init]))
  {
     CustomView * customView = [[[CustomView alloc] init] autorelease]; // or load from NIB
     [self addSubview:customView];
     [self performSelector:@selector(dismissAfterDelay) withObject:nil afterDelay:interval];
  }
  return self;
}

- (void)dismissAfterDelay
{
  [self dismissWithClickedButtonIndex:0 animated:YES]; 
}

Pour afficher votre alerte personnalisée de vue juste init, et appelez show comme avec un UIAlertView.

CustomAlertView * cav = [[CustomAlertView alloc] initWithMessage:@"Doing Something];
[cav show];
[cav release];

Comme un bel effet, lorsque vous présentez ce point de vue le fond s'assombrit et vous obtiendrez la belle bancale de l'animation pour toute alerte de vue.

9voto

Kennzo Points 416

Utilisation UIAlertView. Voici un petit lien vers un exemple simple:

UIAlertView

Modifié: Désolé, ne voient pas en train de disparaître sur son propre. Je pense que vous devez avoir la confirmation par les utilisateurs de messages reçus. UIAlertView assez bien accomplit que. Vous ne savez pas si vous l'avez à disparaître progressivement, sauf si vous êtes dans une application avec une vue qui dispose d'une minuterie ou d'un événement en fonction de retard qui va afficher une vue et puis finalement le supprimer.

Deuxième edit: Trouvé un moyen de la mettre en œuvre. Vous pouvez manuellement à l'appel de la rejeter fonction après quelques temps que vous avez désigné. (Désolé pour le désordre post), Il ressemblerait à quelque chose comme ceci:

//Create UIAlertView alert
alert = [[UIAlertView alloc] initWithTitle:@"Title" message:@"Some message" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles: nil];

//After some time
[alert dismissWithClickedButtonIndex:0 animated:TRUE];

8voto

htafoya Points 3207

J'ai créé un Android-Type toast, assez simple parce que je n'ai pas besoin de plus de fonctionnalités pour l'instant.

Lorsqu'il est démontré qu'il est ajouté au bas de la parent de la vue, de sorte que si ce point de vue est le CR de la vue, puis il sera au centre en bas de l'appareil.

Le cadre est autoadjusted à la longueur du texte.

Vous l'utilisez à faire: [self.view addSubview: [[ToastAlert alloc] initWithText: @"Sent"]];, elle sera automatiquement supprimé si aucune référence n'est nécessaire.

Je n'ai pas encore mis en œuvre, mais vous pouvez créer une méthode statique afin de simplifier et de clarifier l'instruction, sorte de: [ToastAlert showText: @"Sent" inView: self.view];.

La classe:

ToastAlert.h

@interface ToastAlert : UILabel {

}

- (id)initWithText: (NSString*) msg;

@end

ToastAlert.m

#import "ToastAlert.h"
#import <QuartzCore/QuartzCore.h>

@implementation ToastAlert

#define POPUP_DELAY  1.5

- (id)initWithText: (NSString*) msg
{

    self = [super init];
    if (self) {

        self.backgroundColor = [UIColor colorWithWhite:0 alpha:0.7];
        self.textColor = [UIColor colorWithWhite:1 alpha: 0.95];
        self.font = [UIFont fontWithName: @"Helvetica-Bold" size: 13];
        self.text = msg;
        self.numberOfLines = 0;
        self.textAlignment = UITextAlignmentCenter;
        self.autoresizingMask = UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin;


    }
    return self;
}

- (void)didMoveToSuperview {

    UIView* parent = self.superview;

    if(parent) {

        CGSize maximumLabelSize = CGSizeMake(300, 200);
        CGSize expectedLabelSize = [self.text sizeWithFont: self.font  constrainedToSize:maximumLabelSize lineBreakMode: NSLineBreakByTruncatingTail];

        expectedLabelSize = CGSizeMake(expectedLabelSize.width + 20, expectedLabelSize.height + 10);

        self.frame = CGRectMake(parent.center.x - expectedLabelSize.width/2,
                                parent.bounds.size.height-expectedLabelSize.height - 10,
                                expectedLabelSize.width,
                                expectedLabelSize.height);

        CALayer *layer = self.layer;
        layer.cornerRadius = 4.0f;

        [self performSelector:@selector(dismiss:) withObject:nil afterDelay:POPUP_DELAY];
    }
}

- (void)dismiss:(id)sender {
    // Fade out the message and destroy self
    [UIView animateWithDuration:0.6  delay:0 options: UIViewAnimationOptionAllowUserInteraction
                     animations:^  { self.alpha = 0; }
                     completion:^ (BOOL finished) { [self removeFromSuperview]; }];
}

@end

8voto

async8192 Points 32

Utiliser un UIAlertView à néant titre et le néant boutons, puis le rejeter quand vous le souhaitez. Voici comment j'ai procédé:

Créer une variable d'instance pour l'affichage des alertes dans votre .h fichier:

@interface StatusMessageController : UIViewController {
    UIAlertView *statusAlert;
}

Dans votre .m de fichier, de créer une méthode pour montrer l'affichage des alertes et démarrer une minuterie, et une autre pour gérer lors de l'expiration de la minuterie pour désactiver l'alerte:

- (void)showStatus:(NSString *)message timeout:(double)timeout {
    statusAlert = [[UIAlertView alloc] initWithTitle:nil
                                                    message:message
                                                   delegate:nil
                                          cancelButtonTitle:nil
                                          otherButtonTitles:nil];
    [statusAlert show];
    [NSTimer scheduledTimerWithTimeInterval:timeout
                                     target:self
                                   selector:@selector(timerExpired:)
                                   userInfo:nil
                                    repeats:NO];
}

- (void)timerExpired:(NSTimer *)timer {
    [statusAlert dismissWithClickedButtonIndex:0 animated:YES];
}

Chaque fois que vous souhaitez afficher le message d'état, l'invoquer:

[self showStatus:@"Computing" timeout:4.5];

À tout moment, vous pouvez également désactiver l'alerte avec:

[statusAlert dismissWithClickedButtonIndex:0 animated:YES];

Vous pouvez également modifier le message à la volée avec un nouveau statut:

statusAlert.message = @"Looking up user";

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