0

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

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

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

4

1 回答 1

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

虽然第二种选择是更多的代码,但我认为它通常更适合。使用委托可以减少耦合并与得墨忒耳法则很好地配合使用。有关详细信息,请参阅此文档

于 2012-06-23T03:00:35.987 回答