2012-03-07 73 views
0

所以我有一個A類中,我有以下幾點:多個類別UIToolbar

@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顏色/配置,我該怎麼做?

回答

1

A和B都沒有課,他們的類別。任何給定的類一次只能有一個給定方法的實現。如果您嘗試在多個類別中覆蓋方法,那麼您獲得的實現是未定義的。事實上,不建議重寫類別中的方法 - 如果您需要重寫,則應該創建一個子類。

+0

繼承了一個新類,以便更改UIToolbar的顏色/背景顏色, iOS 5你需要有一個子類?如果我有不同的顏色 – adit 2012-03-07 19:47:10

+0

正確。你需要繼承,而不是創建一個類別。 – 2012-03-07 19:50:05

+0

@adit我相信我已經使用UIToolbar的'tintColor'財產在(前的iOS 5)過去,雖然我沒有得心應手的任何代碼。這個問題/答案似乎證實它應該可以正常工作。作者的答案也有好的提示:http://stackoverflow.com/q/3151549/643383 – Caleb 2012-03-07 19:53:55

0

當您使用此實現,這是所有uitoolbar這是自定義的主題。 如果您的應用程序是在ios5下開發的,則可以使用方法setBackgroundImage:forToolbarPosition:barMetrics:

如果您在IOS < 5開發,可以實現從有一個自定義的drawRect uitoolbar繼承了一個新類。

+0

這是適用於iOS 4的,我知道iOS 5的setBackgroundImage方法...這就是我正在做的事情,從UIToolbar – adit 2012-03-07 19:45:04