如何让一个类与它的视图控制器通信发生了什么事

时间:2010-12-08 16:21:43

标签: iphone class uiview uiviewcontroller

我有一个运行我的游戏视图的viewController。 viewController生成Dots的实例,这些Dots是UIView的子类,它们作为子视图添加到viewController视图中。在圆点类中,如果它们被触摸我会有某些行为(touchesBegan)但我也喜欢触摸点以添加到viewController的属性得分,但是我看不出有任何方式可以在没有它的情况下进行通信荒谬的解决方法。我在这里缺少什么?

2 个答案:

答案 0 :(得分:0)

两个选项(但不是唯一的选项)是NSNotificationCenter和delegate + protocol。

NSNotificationCenter更易于实施和使用,但在所有情况下都不理想。 viewController将调用addObserver以指示它对某些消息感兴趣。点将调用postNotificationName将消息发送给感兴趣的对象。一定要在viewController的dealloc中调用removeObserver。

Delegate + protocol允许您在对象之间定义更严格,定义良好的编译器或运行时可验证的接口。有关详细信息,请参阅Objective-C编程语言中的Protocols

在您的情况下,我认为定义协议是更好的选择。 viewController将使自己成为点对象的委托。点对象将具有委托属性,并通过delegate属性调用协议方法。

答案 1 :(得分:0)

为什么得分首先是ViewController的属性?我可以看到标签的属性显示得分,但得分本身属于某种模型对象。

这种方法的优点是您可以使用键值观察(KVO),将ViewController添加为模型对象的观察者。实际上,这几乎就是KVO的设计目标:一种简单的方法来通知任意数量的观察者有关物业变更的信息。

参考:
Key-Value Coding Protocol Reference
Key-Value Observing Protocol Reference
Model Object Implementation Guide