ViewController或UIView应该在控制中?

时间:2019-02-12 00:46:16

标签: ios swift protocols

所以我有一个'ListViewController',其子视图名为'ListView'

ListView是包含所有剩余子视图的主视图。

在listView的内部,有一个名为PhotoView的子视图,它的内部有一个UIButton,可切换PhotoView的约束,并根据任意值调整大小。

层次结构如下:

ListViewController <- ListView <- PhotoView

我这样做的原因是为了最大程度地减少每个视图中的代码量,并将其分段。

  

我的问题是:谁应该负责“调整大小”功能?我的   理解是viewController通常应该处理   内部的主要功能与其子视图有关。

但是,在这种情况下,它是在其子视图子视图“ PhotoView”中处理的。我应该使用协议将其持久保存到ListViewController吗? PhotoView(Protocol) -> ListView(Protocol) -> ListViewController

这是正确的方法吗?还是有一种更有效的方式处理subview函数?

谢谢大家

1 个答案:

答案 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就足够了小文件。