0
我搜索了這個問題的答案,而且我發現答案不工作。訪問上海華性質
我有一種觀點認爲,是的UIView的一個子類,而我已經添加了一個屬性。我想從此視圖創建的子視圖訪問此屬性。那可能嗎?
我試過指self.superview.propertyname,但我得到的屬性名未在類型的UIView對象發現錯誤。好吧,對。我意識到,由於它是UIView的子類,它是一個UIView,但我怎麼才能知道它添加的額外屬性?
我搜索了這個問題的答案,而且我發現答案不工作。訪問上海華性質
我有一種觀點認爲,是的UIView的一個子類,而我已經添加了一個屬性。我想從此視圖創建的子視圖訪問此屬性。那可能嗎?
我試過指self.superview.propertyname,但我得到的屬性名未在類型的UIView對象發現錯誤。好吧,對。我意識到,由於它是UIView的子類,它是一個UIView,但我怎麼才能知道它添加的額外屬性?
你有多種選擇,其中兩個是:
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。
謝謝。我想現在我會使用第一種方法,部分原因是我昨晚在睡夢中提出了基本相同的解決方案,然後再嘗試使用其他解決方案。 –
實際上,對於我正在開發的項目,我認爲最簡單的解決方案是將屬性添加到子類中,並通過實例化子視圖的視圖中的編碼進行設置。這是多餘的,但很簡單。而且這個問題的價值並不會改變這個項目。不過,我會在未來的項目中記住你的建議。 –