从子对象访问文件所有者的属性

时间:2013-05-15 21:25:26

标签: xcode ios6 uiviewcontroller interface-builder xib

我想知道如何从位于xib中的另一个类对象访问属于我的File的Owner类的属性。

我的xib的文件所有者是一个具有属性x的ViewController。

UIView位于xib文件中,是一个名为CustomUIView的子类。

如何从CustomUIView类中访问位于视图控制器中的属性x?

我不想创建File的Owner对象的新实例(或者我?),我觉得这只会创建它的新实例而不使用实例化的实例(父实例或CustomUIVIew?)。

我是否总体上感到困惑,需要重新审视iOS开发的一些基本原则? (我是游戏的新手)

1 个答案:

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