2012-06-23 102 views
0

我搜索了這個問題的答案,而且我發現答案不工作。訪問上海華性質

我有一種觀點認爲,是的UIView的一個子類,而我已經添加了一個屬性。我想從此視圖創建的子視圖訪問此屬性。那可能嗎?

我試過指self.superview.propertyname,但我得到的屬性名未在類型的UIView對象發現錯誤。好吧,對。我意識到,由於它是UIView的子類,它是一個UIView,但我怎麼才能知道它添加的額外屬性?

回答

2

你有多種選擇,其中兩個是:

1鑄造:

@implementation SubviewView 
- (void)blah 
{ 
    ((CustomView *)self.superview).property = ...` 
} 
@end 

2.代表:

@protocol SubviewViewDelegate 
- (void)customView:(SubView *)sv modified:(...)value; 
@end 

@class SubView 
@property (nonatomic, weak) id <CustomViewDelegate> delegate; 
@end 

@implementation SubviewView 
- (void)blah 
{ 
    [self.delegate subView modified:...]; 
} 
@end 

@implementation CustomView 
- (void)subView:(SubView *)sv modified:(...)value 
{ 
    self.property = value; 
} 
@end 

雖然第二個選項是更多的代碼,我認爲它往往更適合。使用代表可減少耦合,並與Law of Demeter很好地配合使用。欲瞭解更多信息,請參閱此documentation

+0

謝謝。我想現在我會使用第一種方法,部分原因是我昨晚在睡夢中提出了基本相同的解決方案,然後再嘗試使用其他解決方案。 –

+0

實際上,對於我正在開發的項目,我認爲最簡單的解決方案是將屬性添加到子類中,並通過實例化子視圖的視圖中的編碼進行設置。這是多餘的,但很簡單。而且這個問題的價值並不會改變這個項目。不過,我會在未來的項目中記住你的建議。 –