2012-08-01 74 views
0

我有一個具有屬性UIView *視圖的超類O.Objective-C繼承和類型轉換

@interface O : NSObject 
{ 
    UIView *view; 
} 

@property (nonatomic, weak) UIView *view; 

@end 

的UIView sublass:

@interface myView : UIView 

@property (nonatomic, weak) UIColor color; 

我則有Ô的sublass其在其init如下:

view = [[myView alloc] init]; 
view.color = [UIColor redColor]; 

顏色是一些自定義繪製使用MyView的的屬性碼。

這會導致編譯器崩潰,因爲UIView沒有屬性顏色。我可以使用setColor方法設置該值,但能夠通過點語法訪問該屬性會很好。

有沒有辦法做到這一點?

+0

[子類中屬性的窄類型]的可能重複(http://stackoverflow.com/questions/10711755/narrow-type-of-property-in-subclass) – jrturton 2012-08-01 06:09:53

+0

同時http://stackoverflow.com/questions/10770578/create-subclass-with-different-subclass-property和http://stackoverflow.com/questions/4248066/objective-c-narrow-instance-variable-types-in-subclasses – jrturton 2012-08-01 06:10:15

回答

1

編輯:

在特定情況下,你需要聲明viewmyView *view而不是UIView在.h文件中。那麼你將有訪問自定義顏色屬性。

+0

我在myView的一些自定義繪圖代碼中使用顏色變量,它不是backgroundColor。 – 2012-08-01 05:56:36

+0

您可能正在使用setcolor來設置'drawrect'中的graphicscontext的顏色,但在您的具體情況下它不作爲UIView – samfisher 2012-08-01 05:59:37

+1

的屬性提供,您需要在.h中聲明'view'爲'myView * view'而不是UIView文件。那麼你將可以訪問自定義的'color'屬性。 – samfisher 2012-08-01 06:01:42

0

試試這個:

self.view.backgroundColor=[UIColor redColor]; 
+0

我使用顏色變量在myView中的一些自定義繪圖代碼中,它不是backgroundColor。 – 2012-08-01 05:55:47

+0

是你在myView類中聲明的顏色屬性嗎? – 2012-08-01 05:58:28

+0

是的,在這個課外我可以很好地使用它。 – 2012-08-01 06:00:31

0

你如何能夠使用setColor:?我沒有看到UIView的這種方法。您可以使用backgroundColor屬性,並使用點和方法符號訪問它。

至於點與方法符號,分配給.propertyName的所有屬性將與調用setPropertyName:相同。只有當setSomething不是@property,只是一個明確聲明的方法,但是在Apple的框架中,我不認爲這是可能的,否則您將無法調用點符號。

+0

setColor是myView中的一種方法,所以它無論如何都會發送消息,而不必知道類型。 – 2012-08-01 05:57:06

0

你可以宣佈你的O使用myView

哦:

@class myView; 

@interface O: NSObject { 
    myView *view; 
} 
.... 
@end 

庵:

#import "myView.h" 

.... 

在這種情況下,宣佈@class myView你不需要在O.h進口myView.h這很好。你只是告訴編譯器,其他地方有一個myView。現在您可以使用您的自定義屬性myView實例。

如果你確信O.view的類型是始終myView你可以調用二傳手,像這樣的另一件事:

[view setColor:theColor]; 

,但我不建議這樣做,因爲如果view還會有其他一些實例UIView類會出錯,表示沒有選擇器setColor

我強烈建議您聲明view屬性與適當的類。