Iphone UIToolbar的多个类别

Iphone UIToolbar的多个类别,iphone,objective-c,ios,ipad,Iphone,Objective C,Ios,Ipad,所以我有一个a级,我有以下几点: @implementation UIToolbar (A) - (void)drawRect:(CGRect)rect { UIColor *color = [UIColor colorWithWhite:0.0 alpha:1.0]; CGContextRef context = UIGraphicsGetCurrentContext(); CGContextSetFillColor(context, CGColorGetCompon

所以我有一个a级,我有以下几点:

@implementation UIToolbar (A)
- (void)drawRect:(CGRect)rect {

    UIColor *color = [UIColor colorWithWhite:0.0 alpha:1.0];
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetFillColor(context, CGColorGetComponents( [color CGColor]));
    CGContextFillRect(context, rect);
    self.tintColor = [UIColor colorWithWhite:0.0 alpha:1.0];

}
@end
@implementation UIToolbar (B)
- (void)drawRect:(CGRect)rect {

    UIColor *color = [UIColor colorWithWhite:10.0 alpha:1.0];
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetFillColor(context, CGColorGetComponents( [color CGColor]));
    CGContextFillRect(context, rect);
    self.tintColor = [UIColor colorWithWhite:0.0 alpha:1.0];

}
@end
我有一个B级,我有以下几项:

@implementation UIToolbar (A)
- (void)drawRect:(CGRect)rect {

    UIColor *color = [UIColor colorWithWhite:0.0 alpha:1.0];
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetFillColor(context, CGColorGetComponents( [color CGColor]));
    CGContextFillRect(context, rect);
    self.tintColor = [UIColor colorWithWhite:0.0 alpha:1.0];

}
@end
@implementation UIToolbar (B)
- (void)drawRect:(CGRect)rect {

    UIColor *color = [UIColor colorWithWhite:10.0 alpha:1.0];
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetFillColor(context, CGColorGetComponents( [color CGColor]));
    CGContextFillRect(context, rect);
    self.tintColor = [UIColor colorWithWhite:0.0 alpha:1.0];

}
@end

问题是为什么每次只调用顶级类别?基本上,我希望为每个不同的UIViewController提供不同的UIToolbar颜色/配置,如何做到这一点?

当您使用此实现时,这都是自定义主题的UIToolbar。 如果您的应用程序是在ios5下开发的,那么可以使用方法
setBackgroundImage:forToolbarPosition:barMetrics:


如果在ios<5下开发,可以实现从uitoolbar继承的新类,该类具有自定义drawRect。

a和B不是类,而是类别。任何给定类一次只能有一个给定方法的实现。如果您试图覆盖多个类别中的方法,那么您得到的实现是未定义的。实际上,根本不建议覆盖类别中的方法——如果需要覆盖,应该创建一个子类。

这是针对iOS 4的,我知道iOS 5的setBackgroundImage方法。。。这就是我现在正在做的,创建一个从UIToolbar继承的新类,所以要在iOS 5之前的版本中更改UIToolbar的颜色/背景色,您需要一个子类吗?如果我有不同的颜色正确。您需要子类化,而不是创建类别。@adit我相信我在过去(iOS 5之前)使用过UIToolbar的
tintColor
属性,尽管我手头没有任何代码。不过,这个问题/答案似乎证实了它应该可以正常工作。在作者的回答中也有好的提示: