我已经搜索了这个问题的答案,我找到的答案不起作用。
我有一个视图,它是我添加了一个属性的UIView的子类。我想从此视图创建的子视图中访问此属性。这可能吗?
我尝试过引用self.superview.propertyname,但是我收到一个错误,即在UIView类型的对象上找不到propertyname。好吧,对。我意识到因为它是UIView的子类,所以它是一个UIView,但我怎么能让它知道我添加的额外属性呢?
答案 0 :(得分: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。