我想知道如何从位于xib中的另一个类对象访问属于我的File的Owner类的属性。
我的xib的文件所有者是一个具有属性x的ViewController。
UIView位于xib文件中,是一个名为CustomUIView的子类。
如何从CustomUIView类中访问位于视图控制器中的属性x?
我不想创建File的Owner对象的新实例(或者我?),我觉得这只会创建它的新实例而不使用实例化的实例(父实例或CustomUIVIew?)。
我是否总体上感到困惑,需要重新审视iOS开发的一些基本原则? (我是游戏的新手)
答案 0 :(得分:1)
向视图添加一个指向视图控制器的属性。
@interface CustomUIView
...
@property (nonatomic, weak) IBOutlet ViewController *viewController;
...
@end
将此插座连接到Interface Builder中的视图控制器。
现在您可以从视图中访问它:
self.viewController.x
然而,这是一个相当“落后”的设计,我认为可能有更好的方法来实现你想要的。通常,视图不应该直接访问数据(甚至控制器)。相反,它应该有一组足以表示或呈现视图负责的属性。
在您的情况下,您可以将属性x
添加到视图中。只要您的模型(视图控制器的x
)发生更改,您就会更新视图。如果您需要收到有关视图更改的通知,可以在视图中覆盖设置器。
@interface CustomUIView
@property (nonatomic, strong) NSObject *x;
...
@end
@implementation CustomUIView
- (void)setX:(NSObject *)x {
if (_x != x) {
_x = x;
// x was changed, do anything you need to update the view here
// like calling [self setNeedsDisplay] to redraw the view.
}
}
...
@end