当 UIViewController 回到顶部时,iOS 中是不是有委托函数来获得通知?
Posted
技术标签:
【中文标题】当 UIViewController 回到顶部时,iOS 中是不是有委托函数来获得通知?【英文标题】:Is there a delegate function in iOS to get notified when a UIViewController is coming back to top?当 UIViewController 回到顶部时,iOS 中是否有委托函数来获得通知? 【发布时间】:2019-04-18 18:52:09 【问题描述】:我有点 Swift/ios 新手,但这看起来很简单。我有一个 UIViewController 并且在某些操作后我正在实例化另一个模态 UIViewController,在某些时候我会关闭它。我只需要在发生这种情况时通知发起 VC。意识到这可以使用导航控制来处理,我正在寻找一种方式来完成它,即
我想将模态 vc 推送到层次结构:
let vc = storyboard.instantiateViewController(withIdentifier: "DetailView")
self.present(vc, animated: true, completion: nil)
当我在模态 vc 中执行此操作时:
dismiss(animated: true, completion: nil)
我只想让位于后台的原始 vc 得到通知,它重新回到焦点(或顶部)并能够执行代码。
我错过了什么?
【问题讨论】:
viewWillAppear
.
@rmaddy 我对 viewWillAppear 的理解是它只通知一个视图即将添加到视图层次结构中。在这种情况下,我的视图不是已经在层次结构中了吗,只是坐在堆栈中的一个吗?
它再次出现时也会被调用(大多数情况下)。
@rmaddy 我想这一定是其中一种情况。 viewWillAppear 不会被调用 - 至少,如果我正确实施的话。只需添加一个覆盖函数,当模态 vc 关闭时它不会执行。嗯
模态框是否在弹出框中?这就是其中一种情况。
【参考方案1】:
已更新:这里的答案很简单。以“Over Current Context”呈现样式以模态方式呈现的 ViewController 在被解散时不会在呈现的 VC 中触发 ViewWillAppear
。下面的答案作为一个黑客工作得很好,但更简单的解决方案是我正在寻找的。即,将演示样式更改为全屏。
所以我最终实现了一个紧凑的解决方案——有些人会说没有协议就不是 OOP,我同意——但在这个应用程序的范围内,它在简单的呈现/解除构造的上下文中解决了问题。
在演示的vc中,我添加了这段代码。
let vc = storyboard.instantiateViewController(withIdentifier: "DetailView") as! DetailViewController
vc.masterVC = self
self.present(vc, animated: true, completion: nil)
在模式关闭时调用的 masterVC 中声明的函数,即:
func calledWhenModalDismisses()
// Do This
在弹出的modal DetailView中,我只是创建了一个指向master的成员:
var masterVC: MasterViewController?
然后在我的详细解除函数中,我可以回调我在 MasterVC 中创建的函数。
masterVC?.calledWhenModalDismisses()
dismiss(animated: true, completion: nil)
再次重申,这不是一个真正的 OOP 解决方案(没有协议),但我相信这将有助于某人通过简单紧凑的解决方案来解决简单的主/详细问题,当呈现的 vc 需要在详细 vc 正在被提醒时被解雇。当 vc 进入“焦点”时,Apple 实际上应该有一个委托函数来处理这个问题,但他们没有。
【讨论】:
以上是关于当 UIViewController 回到顶部时,iOS 中是不是有委托函数来获得通知?的主要内容,如果未能解决你的问题,请参考以下文章