Swift: 如何处理紧耦合视图?

Swift: How to handle tightly coupled views?

我有一个 UIViewControllerUINavigationController 的一部分,我想在我的导航栏中有一个自定义视图。代码是这样的:

class MyViewController: UIViewController
    override func viewDidLoad() {
        super.viewDidLoad()
        self.customNavigationView = MyNavigationView()
        self.navigationItem.titleView = self.customNavigationView
    }
}

MyViewControllerMyNavigationView 在某种意义上是紧密耦合的——它们构成了 UI 的一个片段,只有一起使用时才有意义。我想知道处理这种情况的首选方法是模式明智的。特别是,将消息从 MyNavigationView 发送到 MyViewController 的首选方式是什么(例如点击的按钮)。

我看到了以下选项:

我想知道其他人对此有何看法。是否有清晰的图案应该在这里使用,还是品味问题?

如果您只需要知道其他视图是否发生了某些事情,我会使用通知,实施起来更容易和更快,如果您需要有关如何使用通知的更多解释,请询问,我可以编辑我的答案并解释更多。

虽然这个问题的任何答案最终都是在 MVP 设计模式中固执己见,但视图不应包含任何业务逻辑,而应仅包含显示逻辑。这意味着它不应该知道它的主机的任何信息。

我的处理方式是在其宿主中编写连接代码和交互代码。

class MyNavigationView : UIView
{
   var button : UIButton!

}

class ViewController : UIViewController   
{
      override func viewDidLoad() {
       super.viewDidLoad()
       self.customNavigationView = MyNavigationView()
       self.navigationItem.titleView = self.customNavigationView
       // here you can assign gesture recognizers or add event listeners 

    }
}