2009-10-02 83 views
0

根據我閱讀的文檔,他們總是表明我應該在課堂上定義一個子視圖。像這樣:我可以在Objective-C中將UIView定義爲變量嗎?

@interface PolygonView : UIView. 

我必須從UIView繼承。

我可以在繼承自NSObject的類中定義一個UIView類型的變量嗎?之後,我將該變量連接到Interface Interface中定義的UIView。 的問題是,我不能重寫 - (void)drawRect:(CGRect)rect

+0

你有沒有不想繼承UIView的原因? UIViews沒有委託方法允許其他類定義視圖的繪圖。 – nall 2009-10-02 01:47:17

+0

我只是認爲它很像Label,Slide等其他組件,我可以簡單地定義它們。我曾經這樣做過: CGRect frame = CGRectMake(100,100,140,21); \t [pogview initWithFrame:[frame]]; \t [pogview drawRect:frame]; – Khoa 2009-10-03 04:13:42

回答

0

是的,你可以在普通的NSObject子類中定義一個指向UIView的變量。但是,如果你這樣做,當然你不能覆蓋drawRect: - 該對象只是一個UIView的引用,它不是一個視圖本身。這很像你可以有一個變量是一個int,但這並不意味着包含該變量的對象是一個int。

如果您想覆蓋視圖的繪圖,則需要創建視圖。你仍然可以有一個獨立的類,與外部的UIView子類進行交互。

+0

我以前多次使用過vanilla'UIView'。你可以設置他們的'backgroundColor',你基本上有一個彩色的矩形。不僅如此,它們可以用作子視圖的通用容器。這可能不是海報正在尋找的東西,但有這樣做的正當理由。 – jbrennan 2009-10-02 02:38:59

+0

@ jbrennan:你在說什麼?我從來沒有說過你不能那樣做。 – Chuck 2009-10-02 03:08:30

+0

我知道,只是想提一下,即使沒有子類化,'UIView'也是有用的。它與您的答案協同工作。 – jbrennan 2009-10-05 01:14:41

2

通常你會做這樣的事情

@interface MyView : UIView { 
// Declare IBOutlets here if you wish or other instance variables you may need 
} 
@end 

@implementation MyView 

- (void)drawRect:(CGRect)rect { 
// Drawing stuff 
} 

然後在Interface Builder中,創建一個視圖(通常通過進行查看廈門國際銀行或拖出一個自定義的UIView對象放到(好,進入)XIB中的另一個UIView,從而使其成爲子視圖),然後在Inspector窗格中將其類設置爲MyView。然後,您可以連接您在MyView界面聲明中定義的任何IBOutlet。

相關問題