2011-09-12 2 views
1

J'ai une application avec un bouton dans le bas que je crée en utilisant une bibliothèque UIButton, GradientButton (trouvé ici: http://code.google.com/p/iphonegradientbuttons/).Comment redessiner mon GradientButton dans mon application iPhone?

Je peux créer des boutons très bien, mais je ne peux pas pour la figure du monde comment changer le gradient de couleur du bouton créé après que j'ai une fois la couleur ...

J'ai essayé, à titre d'exemple, de changer le gradient, par exemple de mon bouton de ActionListener avec divers trucs (je le mettre en viewDidLoad la première fois):

- (IBAction)buttonPressed:(id)sender{ 
    NSLog(@"buttonPressed;changing style");  
    [checkInCheckOutButton useAlertStyle];//build-in method in gradientbutton that sets colour 
    [checkInCheckOutButton setNeedsDisplay];//added this when first didn't work. 
} 

suis-je raté quelque chose? Si je change tout autre composant intégré, disons le texte d'un bouton régulier et/ou l'arrière-plan, tout fonctionne bien.

S'il y a quelque chose que je ne reçois pas sur la façon dont les objets sont repeints dans c objectif, je suis toutes les oreilles ...

EDIT: après la suggestion, j'ai essayé d'ajouter un peu de code pour modifier les tableaux de couleurs de le bouton. Malheureusement cela n'a pas fonctionné non plus:

- (IBAction)buttonPressed:(id)sender{ 

NSLog(@"buttonPressed;changing style");  
self.checkInCheckOutButton.normalGradientColors = [NSArray arrayWithObjects:[UIColor redColor], [UIColor blueColor], nil]; 
self.checkInCheckOutButton.highlightGradientColors = [NSArray arrayWithObjects:[UIColor greenColor], [UIColor whiteColor], nil]; 
[self.checkInCheckOutButton setNeedsDisplay];//tried with and without 

Répondre

0

J'ai trouvé une solution. Ajoutez ces lignes au début de chaque méthode use...Style:

normalGradient = NULL; 
highlightGradient = NULL; 

et ajouter [self setNeedsDisplay]; à la fin de ces méthodes.

Après ces changements, cela fonctionne!

+0

Whee, super trucs. Merci! – Mathias

0

dépend de quand/pourquoi vous voulez le changer.

Il semble que vous pouvez simplement utiliser normalGradientColors et highlightedGradientColors pour changer complètement les couleurs.

Cela ... Honnêtement, il semble que tout ce que vous avez à faire. il suffit de changer ces propriétés ... main dans un tableau de couleurs.

//This changes the colors for UIControlStateNormal 
theButton.normalGradientColors = [NSArray arrayWithObjects:(id)[[UIColor redColor] CGColor], (id)[[UIColor blueColor] CGColor], nil]; 
//This changes the colors for UIControlStateHighlighted 
theButton.HighlightedGradientColors = [NSArray arrayWithObjects:(id)[[UIColor redColor] CGColor], (id)[[UIColor blueColor] CGColor], nil]; 

EDIT: ajouté à CGCouleur. Si vous utilisez ARC, vous devrez ajouter la balise de pont au lieu de la « simple » jeté

(__bridge id) 
+0

Salut, merci pour votre aide. Pour moi, ça n'a pas fonctionné malheureusement. J'ai édité ma question pour montrer ce que j'ai fait. * sob * :) – Mathias

+0

désolé à ce sujet, j'étais un peu hâtive. J'ai pensé au casting mais je ne l'ai pas mentionné. – griotspeak

+0

Hey mec, maaan ça ne marche toujours pas pour moi. Ce qui est interessant est que dans mon "viewdidload" j'ai [checkInCheckOutButton useAlertStyle]; donc le bouton a cette couleur, mais je ne mets pas en surbrillance. Donc, la * première * fois que je change les tableaux, la mise en surbrillance est réglée de sorte que le bouton soit différent quand je l'appuie, mais après cela, rien ne se passe quand je change les tableaux. D'une façon ou d'une autre, le changement ne se produit que lorsqu'il n'a pas encore été réglé ... Je suis perplexe! :) – Mathias

Questions connexes