UIToolbar的多个类别

时间:2012-03-07 19:31:23

标签: 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, CGColorGetComponents( [color CGColor]));
    CGContextFillRect(context, rect);
    self.tintColor = [UIColor colorWithWhite:0.0 alpha:1.0];

}
@end

我有一个B级,我有以下内容:

@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颜色/配置,我该怎么做?

2 个答案:

答案 0 :(得分:1)

A和B不是类,它们是类别。任何给定的类一次只能有一个给定方法的实现。如果您尝试覆盖多个类别中的方法,那么您获得的实现是未定义的。实际上,建议不要覆盖类别中的方法 - 如果需要覆盖,则应创建子类。

答案 1 :(得分:0)

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

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