51 votes

Android Toast dans l'iPhone

J'ai fait de l'application Android, il y a quelques mois. Le Toast de classe est très utile pour moi. Je n'ai pas besoin de considérer le Thread principal et le lieu de la montrer. N'importe où je peux le montrer et il suffit de laisser ça et il est automatiquement disparu.

Toast.makeToast(context, msg, Toast.LENGTH_SHORT).show();

C'est tout. ^^

Ce que sur l'iPhone? Est-il quelque chose comme le Pain? Juste afficher un message et n'ont pas besoin de s'en soucier. Il sera automatiquement disparu.

Quelqu'un, qui sait à ce sujet, s'il vous plaît aider moi.

Merci.

72voto

Scarmysun Points 473

J'écris pour Android depuis longtemps et Toast me manque. J'ai mis en place un. Besoin d'un code? vous voilà:

ToastView.h

 #import <UIKit/UIKit.h>

@interface ToastView : UIView

@property (strong, nonatomic) UILabel *textLabel;
+ (void)showToastInParentView: (UIView *)parentView withText:(NSString *)text withDuaration:(float)duration;

@end
 

ToastView.m

 #import "ToastView.h"

@implementation ToastView

@synthesize textLabel;

float const ToastHeight = 50.0f;
float const ToastGap = 10.0f;

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code
    }
    return self;
}

-(void)setTextLabel:(UILabel *)theTextLabel
{
    textLabel = theTextLabel;
    [self addSubview:theTextLabel];
}

+ (void)showToastInParentView: (UIView *)parentView withText:(NSString *)text withDuaration:(float)duration;
{

    //Count toast views are already showing on parent. Made to show several toasts one above another
    int toastsAlreadyInParent = 0;
    for (UIView *subView in [parentView subviews]) {
        if ([subView isKindOfClass:[ToastView class]])
        {
            toastsAlreadyInParent++;
        }
    }

    CGRect parentFrame = parentView.frame;

    float yOrigin = parentFrame.size.height - (100.0 + ToastHeight * toastsAlreadyInParent + ToastGap * toastsAlreadyInParent);

    CGRect selfFrame = CGRectMake(parentFrame.origin.x + 20.0, yOrigin, parentFrame.size.width - 40.0, ToastHeight);
    ToastView *toast = [[ToastView alloc] initWithFrame:selfFrame];

    toast.backgroundColor = [UIColor darkGrayColor];
    toast.alpha = 0.0f;
    toast.layer.cornerRadius = 4.0;

    UILabel *textLabel = [[UILabel alloc] initWithFrame:CGRectMake(5.0, 5.0, toast.frame.size.width - 10.0, toast.frame.size.height - 10.0)];


    textLabel.backgroundColor = [UIColor clearColor];
    textLabel.textAlignment = NSTextAlignmentCenter;
    textLabel.textColor = [UIColor whiteColor];
    textLabel.numberOfLines = 2;
    textLabel.font = [UIFont systemFontOfSize:13.0];

    textLabel.lineBreakMode = NSLineBreakByCharWrapping;

    textLabel.text = text;

    [toast setTextLabel:textLabel];

    [parentView addSubview:toast];

    [UIView animateWithDuration:0.4 animations:^{
        toast.alpha = 0.9f;
        toast.textLabel.alpha = 0.9f;
    }completion:^(BOOL finished) {
        if(finished){

        }
    }];

    [toast performSelector:@selector(hideSelf) withObject:nil afterDelay:duration];

}

- (void)hideSelf
{
    [UIView animateWithDuration:0.4 animations:^{
        self.alpha = 0.0;
        self.textLabel.alpha = 0.0;
    }completion:^(BOOL finished) {
        if(finished){
            [self removeFromSuperview];
        }
    }];
}

@end
 

Appel de ViewController

  [ToastView showToastInParentView:self.view withText:@"What a toast!" withDuaration:5.0];
 

22voto

clide313 Points 999

Je suis intéressé par la construction de cette manière, et je pense que je vais ajouter ce projet à Git dans une semaine.

Edit:

J'ai rapidement craqué vers le bas un peu de code que l'ajout de cette fonctionnalité et le partage de googlecode. Il contient déjà les principales caractéristiques et travailler comme un charme, alors check it out et de l'améliorer si vous le pouvez:

Voici le lien http://code.google.com/p/toast-notifications-ios/

Le projet a été déplacé vers GitHub: https://github.com/ecstasy2/toast-notifications-ios

7voto

Aviel Gross Points 1110

Si quelqu'un est intéressé, j'ai créé un cours très simple sur Toast à ajouter à votre projet.

Ridiculement facile à utiliser: https://github.com/avielg/Android-Toast-for-iOS

5voto

clide313 Points 999

Pour faire suite à cela, le projet a été ajouté à github: https://github.com/ecstasy2/toast-notifications-ios

alors fourche-le bébé fourche-le ....

4voto

Quentin Points 615

Il n'y a pas de classe "out-of-the-box" dans UIKit pour faire cela. Mais il est assez facile de créer une classe offrant ce comportement.

Vous devez juste créer une classe qui hérite de UIView. Cette classe aura la responsabilité - de créer ce que vous voulez afficher, - de s’ajouter elle-même dans la hiérarchie de la vue parent - de se rejeter à l’aide d’un temporisateur.

Vous pourrez l'utiliser comme:

 [ToastView toastViewInView:myParentView withText:@"what a wonderful text"];
 

Cordialement, Quentin

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