per IOS5 *
L'unico modo che ho trovato è usare una categoria UIBarButtonItem:
UIBarButtonItem + Appearance.h
#import <Foundation/Foundation.h>
@interface UIBarButtonItem (Appearance)
+ (void) setupAppearance;
@end
UIBarButtonItem + Appearance.m
#import "UIBarButtonItem+Appearance.h"
#import <objc/runtime.h>
@implementation UIBarButtonItem (Appearance)
+ (void) setupAppearance {
[[UIBarButtonItem appearance] setBackgroundImage: [[UIImage imageNamed:@"customButton"]
resizableImageWithCapInsets: UIEdgeInsetsMake(8, 8, 8, 8)]
forState: UIControlStateNormal
barMetrics: UIBarMetricsDefault];
[[UIBarButtonItem appearance] setBackgroundImage: [[UIImage imageNamed:@"customButtonHiglhighted"]
resizableImageWithCapInsets: UIEdgeInsetsMake(8, 8, 8, 8)]
forState: UIControlStateHighlighted
barMetrics: UIBarMetricsDefault];
Class klass = objc_getClass("UIBarButtonItem");
Method targetMethod = class_getInstanceMethod(klass, @selector(setStyle:));
Method newMethod = class_getInstanceMethod(klass, @selector(__setStyle:));
method_exchangeImplementations(targetMethod, newMethod);
}
- (void) __setStyle:(UIBarButtonItemStyle)style {
[self __setStyle:style];
if(style == UIBarButtonItemStyleDone) {
[self setBackgroundImage:[[UIImage imageNamed:@"customDoneButton"] resizableImageWithCapInsets: UIEdgeInsetsMake(8, 8, 8, 8)]
forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
[self setBackgroundImage:[UIImage imageNamed:@"customDoneButtonClicked"]
forState:UIControlStateHighlighted barMetrics:UIBarMetricsDefault];
} else {
[self setBackgroundImage:[[UIImage imageNamed:@"customButton"] resizableImageWithCapInsets: UIEdgeInsetsMake(8, 8, 8, 8)]
forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
[self setBackgroundImage:[UIImage imageNamed:@"customButtonHighlighted"]
forState:UIControlStateHighlighted barMetrics:UIBarMetricsDefault];
}
}
@end
Spero che questo sia stai cercando. credito per questa soluzione va a https://gist.github.com/2633081
Do u vuole cambiare l'immagine di nuovo in fare clic sul pulsante? – AppleDelegate
Ho già personalizzato il pulsante Indietro. Sto cercando di avere diversi pulsanti "normali" (come il modo in cui iOS usa un pulsante blu per "Fatto" e "Salva", ma grigio per cose come "Annulla"). – James
@James, Un'opzione consiste nell'utilizzare una sottoclasse personalizzata per il pulsante Fine come 'CustomDoneBarButtonItem' da' UIBarButtonItem' e usarlo come '[[CustomDoneBarButtonItem appearance] setBackgroundImage: image forState: UIControlStateNormal barMetrics: UIBarButtonItemStyleDone]'. Ogni volta che aggiungi un pulsante eseguito, crea un oggetto di questa classe personalizzata e aggiungilo. – iDev