访问superview属性

时间:2012-06-23 02:50:33

标签: objective-c c view parent subview

我已经搜索了这个问题的答案,我找到的答案不起作用。

我有一个视图,它是我添加了一个属性的UIView的子类。我想从此视图创建的子视图中访问此属性。这可能吗?

我尝试过引用self.superview.propertyname,但是我收到一个错误,即在UIView类型的对象上找不到propertyname。好吧,对。我意识到因为它是UIView的子类,所以它是一个UIView,但我怎么能让它知道我添加的额外属性呢?

1 个答案:

答案 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

相关问题