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。
谢谢。我想现在我会使用第一种方法,部分原因是我昨晚在睡梦中提出了基本相同的解决方案,然后再尝试使用其他解决方案。 –
实际上,对于我正在开发的项目,我认为最简单的解决方案是将属性添加到子类中,并通过实例化子视图的视图中的编码进行设置。这是多余的,但很简单。而且这个问题的价值并不会改变这个项目。不过,我会在未来的项目中记住你的建议。 –