2012-06-23 154 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

实际上,对于我正在开发的项目,我认为最简单的解决方案是将属性添加到子类中,并通过实例化子视图的视图中的编码进行设置。这是多余的,但很简单。而且这个问题的价值并不会改变这个项目。不过,我会在未来的项目中记住你的建议。 –