2011-11-01 4 views
2

pouvons-nous changer la couleur/teinte d'un uibarbuttonitem quand il est sélectionné et il met en évidence? L'application que je crée sera souvent utilisée à l'extérieur des portes et voudrait que ce soit plus visible dans les situations à haute luminosité pour que l'utilisateur sache qu'il a appuyé sur le bouton.uibarbuttonitem highlight teinte/couleur

EDIT: Je voudrais changer la couleur pour l'état

Répondre

-1

de mis en évidence le bouton que je ne l'ai pas essayé, mais vous pouvez essayer le sous-classement UIBarButtonItem et remplaçant les méthodes touchesEnded:withEvent: et touchesBegan:withEvent: puis de les utiliser pour régler la tintColor pour votre instance UIBarButtonItem.

Vous souhaitez ajouter à votre UIBarButtonItem sous-classe:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
    self.tintColor = [UIColor redColor]; 
} 

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { 
    self.tintColor = [UIColor blueColor]; 
} 
+0

possible, mais ne serait pas touchesEnded fin lorsque l'utilisateur lève son doigt de l'écran et de revenir ainsi en arrière à la couleur d'origine? où je cherche à garder la nouvelle couleur jusqu'à ce que le code soit exécuté. cela pourrait fonctionner comme une retombée, au moins pour montrer que l'utilisateur a appuyé sur le bouton. – Padin215

+0

... OK alors dans ce cas omettez 'touchesEnded: withEvent:' de mon exemple ...? –

+0

Je suppose qu'à la fin de la méthode, je pourrais réinitialiser la tintColor à la normale ... Je vais essayer, merci. – Padin215

-1

A UIButton est une sous-classe de UIControl qui a une adjustsImageWhenHighlighted, un showsTouchWhenHighlighted et une propriété showsTouchWhenHighlighted.

Un UIBarButtonItem est une sous-classe de UIBarItem et n'en possède aucune. Il a cependant un UIBarButtonItemStyle qui, lorsqu'il est défini sur UIBarButtonItemStylePlain, indique que le bouton doit s'allumer lorsqu'il est tapé (mais vous ne pouvez pas spécifier la couleur).

0

Vous pouvez sous-classer UIBarButtonItem et y mettre UIButton avec différentes couleurs d'images d'arrière-plan pour différents états.

- (id)initWithImage:(UIImage *)image target:(id)target action:(SEL)action 
{ 

    UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; 
    button.frame = (CGRect){CGPointZero, image.size}; 

    [button setBackgroundImage:image forState:UIControlStateNormal]; 

    UIImage *highlightedImage = [image imageWithColor:[UIColor textHighlightColor]]; 
    [button setBackgroundImage:highlightedImage forState:UIControlStateHighlighted]; 
    [button setBackgroundImage:highlightedImage forState:UIControlStateSelected]; 

    [button addTarget:target action:action forControlEvents:UIControlEventTouchUpInside]; 

    self = [self initWithCustomView:button]; 

    return self; 

} 

Vous devez mettre cela en catégorie UIImage:

- (UIImage *)imageWithColor:(UIColor *)color 
{ 

    // begin a new image context, to draw our colored image onto 
    UIGraphicsBeginImageContext(self.size); 

    // get a reference to that context we created 
    CGContextRef context = UIGraphicsGetCurrentContext(); 
    CGContextSetFillColorWithColor(context, color.CGColor); 

    // translate/flip the graphics context (for transforming from CG* coords to UI* coords 
    CGContextTranslateCTM(context, 0, self.size.height); 
    CGContextScaleCTM(context, 1.0, -1.0); 

    // set the blend mode to color burn, and the original image 
    CGContextSetBlendMode(context, kCGBlendModeMultiply); 
    CGRect rect = CGRectMake(0, 0, self.size.width, self.size.height); 
    CGContextDrawImage(context, rect, self.CGImage); 

    // set a mask that matches the shape of the image, then draw (color burn) a colored rectangle 
    CGContextClipToMask(context, rect, self.CGImage); 
    CGContextAddRect(context, rect); 
    CGContextDrawPath(context,kCGPathFill); 

    // generate a new UIImage from the graphics context we drew onto 
    UIImage *coloredImg = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 

    //return the color-burned image 

    return coloredImg; 

}