所以我有一个'ListViewController'
,其子视图名为'ListView'
ListView是包含所有剩余子视图的主视图。
在listView的内部,有一个名为PhotoView的子视图,它的内部有一个UIButton,可切换PhotoView的约束,并根据任意值调整大小。
层次结构如下:
ListViewController <- ListView <- PhotoView
我这样做的原因是为了最大程度地减少每个视图中的代码量,并将其分段。
我的问题是:谁应该负责“调整大小”功能?我的 理解是viewController通常应该处理 内部的主要功能与其子视图有关。
但是,在这种情况下,它是在其子视图子视图“ PhotoView”中处理的。我应该使用协议将其持久保存到ListViewController吗? PhotoView(Protocol) -> ListView(Protocol) -> ListViewController
?
这是正确的方法吗?还是有一种更有效的方式处理subview
函数?
谢谢大家
答案 0 :(得分:0)
如果将所有逻辑都移到ListViewController
中,那么一切都非常简单,因为您可以在VC中分配任何UIControl:
class ListViewController : UIViewController{
@IBOutlet var goButton: UIButton! //In the DetailView
@IBOutlet var photoView: PhotoView!
@IBOutlet var detailView: DetailView!
// MARK: --
@IBAction func testCommand(_ sender: Any){
PhotoView.backgroundColor = UIColor.red
detailView.backgroundColor = UIColor.red
}
// MARK: --
@IBAction func photoViewCommand(_ sender: Any){
PhotoView.backgroundColor = UIColor.red
detailView.backgroundColor = UIColor.red
}
// MARK: --
@IBAction func detailViewCommand(_ sender: Any){
PhotoView.backgroundColor = UIColor.red
detailView.backgroundColor = UIColor.red
}
}
您甚至不需要了解ListView。使用IB可以分配所有UIView,不仅可以是直接子级,还可以分配所有子视图树,包括UIControl,如按钮和标签,只要它们位于同一UIViewController的场景中,并且它们的方法位于同一VC中,而不位于其他单独的视图中。
如果有视图代码,则可以轻松地将其移至VC。只需一堂课就能控制所有人。如果您需要知道谁是谁。添加Mark
就足够了小文件。