2012-05-19 64 views
1

我需要知道是否有可能全局覆蓋UI類的drawRect。沿着「外觀」類屬性的行。基本上我需要爲應用程序中的所有按鈕使用我自己的繪圖例程。最好我不想繼承,並且必須在故事板中的每個按鈕上設置類的類型。是否有可能重寫沒有繼承的類的drawRect?

回答

1

使用類屬

@interface UIView (UIViewDR) 
- (void)drawRect:(CGRect)rect; 
@end 


@implementation UIView (UIViewDR) 
- (void)drawRect:(CGRect)rect { /* your implementation */ return; } 
@end 

你可能會使用其他類則UIView的;就像一個按鈕建立在上面的東西。

+0

出於興趣,任何人都不知道這將如何對繼承做出反應。例如,如果我爲UI按鈕實現了這一點,那麼我也想說創建一個從UIButton派生的Tab按鈕,我的新TabButton的drawRect優先? – Slappy

+2

在子類上定義的方法總是優先。如果你想要父方法,那麼你必須顯式調用[super ...](典型的例子是init:方法)。 – GoZoner

0

你看過UIAppearance嗎?我還沒有研究過解決像你以前那樣的問題,但我在谷歌上探索了一下,看起來UIAppearance似乎可以做到這一點?

+0

UIAppearance只允許您修改班級屬性。它並不像我所說的那樣讓你傷心地重寫或委託方法。 – Slappy

相關問題