gpt4 book ai didi

iphone - UINavigationController 拦截 – popViewControllerAnimated :

转载 作者:太空狗 更新时间:2023-10-30 03:57:08 27 4
gpt4 key购买 nike

所以问题是当有人触摸 UINavigationControler 上的后退按钮时,我想运行一些代码来更新数据源。

问题是我似乎找不到合适的代表来做这件事。只有这些在导航 Controller 委托(delegate)上可用,我想要“didfinishshowing”类型的方法。

– navigationController:willShowViewController:animated:  optional method  
– navigationController:didShowViewController:animated: optional method

我认为下一个最佳位置是导航栏,但当我尝试时。

Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Cannot manually set the delegate on a UINavigationBar managed by a controller

这在回顾上是有意义的,因为您不希望某些黑客弄乱导航 Controller 的内部结构并阻止其工作。

这一定是个常见问题,我漏掉了一些简单的东西。

最佳答案

让我们清楚一点: View A 是起点。用户点击某物,然后您向右滑动以查看 B。用户点击后退按钮,您将从 B 返回到 A,并且由于“后退”操作,您想要做某事。

有三种方法可以做到这一点(而且你不必靠近导航 Controller ——这些适用于底层的 View Controller 本身):

  • 正如 dmercredi 建议覆盖 View Controller A 上的 viewWillAppear,因此当您返回它时,它会自行刷新。问题是 viewWillAppear 在第一次调用 A 时也会被调用。因此,当从 B 返回时,您必须设置某种标志来区分第一个 viewWillAppear 和任何后续的。

  • 覆盖 View Controller B 上的 viewWillDisappear 并在那里进行刷新。这只会在 B 即将离开时被调用。如果 B 上的内容更深一层或在顶部调出一个模态对话框,viewWillDisappear 将再次被调用,因此您必须再次区分即将发生和即将发生的事情。

  • 解耦各种 View 并使用委托(delegate)模式。 View Controller A 将自己设置为 B 的委托(delegate),当 B 更新某些内容时,它会调用委托(delegate)方法,因此 A 会收到更改通知并可以更新任何需要的内容。每当用户在 B 中进行更改或覆盖 viewWillDisappear 并在退出时只执行一次,您就可以调用委托(delegate)方法。

关于iphone - UINavigationController 拦截 – popViewControllerAnimated :,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/920379/

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