gpt4 book ai didi

ios - 为什么委托(delegate)/协议(protocol)是 Apple 首选的方法来关闭呈现的 UIViewControllers?

转载 作者:行者123 更新时间:2023-11-28 19:16:38 25 4
gpt4 key购买 nike

当 UIViewController 呈现另一个 View Controller 时,呈现的 View Controller 在 iOS 5 下完成时关闭自身的最简单方法是调用:

[[self presentingViewController] dismissViewControllerAnimated:YES completion:NULL];

另一方面,Apple 的 View Controller Programming Guide说:

When it comes time to dismiss a presented view controller, the preferred approach is to let the presenting view controller dismiss it. In other words, whenever possible, the same view controller that presented the view controller should also take responsibility for dismissing it. Although there are several techniques for notifying the presenting view controller that its presented view controller should be dismissed, the preferred technique is delegation.

这导致一些答案在这里建议坚持制定新的协议(protocol)和委托(delegate),即使只呈现一个非常简单的 View Controller 也是如此。为什么这是文档的“首选技术”而不是上面的单行?使用委托(delegate)/协议(protocol)技术编写的代码大量增加的缺点是否有任何抵消优势?显然,如果有来自呈现 View Controller 的信息需要传递回呈现 View Controller 委托(delegate)是一个很好的技术。然而,信息是委派的原因,而不是简单地从屏幕上干净地删除呈现的 View Controller 。

最佳答案

[self dismissViewControllerAnimated:YES completion:nil](在 iOS 5 [self dismissModalViewControllerAnimated:YES] 之前)可以实现相同的行为,因为总是最多一次(模态)呈现一个 View Controller 。

然而,委托(delegate)模式的要点是单个 View Controller 可以以不同的方式呈现,例如模态或通过推送到导航堆栈。那个 View Controller 不知道它是如何呈现的(好吧,它可以弄清楚,但它不应该关心)。它唯一应该做的就是通知它的父级,即委托(delegate),它的工作已经完成。委托(delegate)然后决定如何删除 View Controller (关闭模式或从导航堆栈弹出等)或者 child 应该留下来,因为它的工作结果是不够的。所以主要思想是 View Controller 的可重用性。

关于ios - 为什么委托(delegate)/协议(protocol)是 Apple 首选的方法来关闭呈现的 UIViewControllers?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11604630/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com