有些答案说Get to UIViewController from UIView?是一种糟糕的设计习惯。
但是,来自Apple自己的BubbleLevel Xcode示例项目的LevelView
具有其viewController
的assign属性。
我认为最好的办法是定义一个协议&将视图控制器指定为视图的委托,就像使用UITableView
或UITextField
或UITextView
一样。
但是,我可能错了,所以我的问题是视图与视图控制器通信的推荐方法是什么?
答案 0 :(得分:9)
委派(使用弱引用)是视图与控制器通信的好方法。但是,您的视图不需要知道它正在与控制器通信。该视图应该只知道存在一些实现其委托协议的对象,而不需要遍历控制器层次结构或使用其委托协议中未定义的委托的任何属性。
这允许视图保持与其控制器非常松散地耦合。您应该能够切换哪个对象充当视图的委托,或者更改哪个控制器正在呈现该视图,而无需更改视图本身。
答案 1 :(得分:2)
UIView的最佳实践是使用可以从ViewController定义的目标与ViewController进行通信,方法是使用(IBAction)方法和(IBOutlets)变量。每当用户使用视图发出任何事件时,它都可以通过这些IBActions警告控制器,并且控制器可以使用IBOutlets(谈话)到视图