Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何在navigationController中的下一个viewController中按下“检测后退”按钮_Ios_Swift_Uinavigationcontroller - Fatal编程技术网

Ios 如何在navigationController中的下一个viewController中按下“检测后退”按钮

Ios 如何在navigationController中的下一个viewController中按下“检测后退”按钮,ios,swift,uinavigationcontroller,Ios,Swift,Uinavigationcontroller,我想检测navigationController中的下一个viewController中是否按下了后退按钮。 假设我在navigationController中有VC_A和VC_B视图控制器。我知道如何在当前视图控制器中检测是否按下了后退按钮,但不知道如何在以前的视图控制器中检测它 编辑: 我从VC_A转到VC_B,当我按下VC_B中的后退按钮时,我想调用VC_A中的一个函数。您可以使用通知中心。此链接有一个很好的教程:如果我理解正确,当按下当前视图控制器导航栏中的“后退”按钮,用户从当前B视图

我想检测navigationController中的下一个viewController中是否按下了后退按钮。 假设我在navigationController中有VC_A和VC_B视图控制器。我知道如何在当前视图控制器中检测是否按下了后退按钮,但不知道如何在以前的视图控制器中检测它

编辑:


我从VC_A转到VC_B,当我按下VC_B中的后退按钮时,我想调用VC_A中的一个函数。

您可以使用通知中心。此链接有一个很好的教程:

如果我理解正确,当按下当前视图控制器导航栏中的“后退”按钮,用户从当前B视图控制器返回到视图控制器时,您希望执行一些操作

当用户按下后退按钮时,将这行代码放入要跟踪的视图控制器中

override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)

    if isMovingToParent {
        //your code when back button is pressed
    }
}
我想检测navigationController中的下一个viewController中是否按下了后退按钮

我不确定自己是否完全理解这一点,但这其实没什么大不了的:本质上,您谈论的是某个视图控制器(称之为
controllerA
),其视图当前不可见,并发现影响其他视图控制器的更改(
controllerB
)。通常需要这种东西的原因是,
controllerA
可以更新它所管理的一些数据


更好的处理方法是让两个控制器共享一个公共数据模型。任何受到诸如视图控制器被取消之类的影响的应用程序状态都是共享数据,这些数据应该是数据模型的一部分
controllerA
真的不应该关心
controllerB
的后退按钮是否被点击。。。该事件仅由
controllerB
(以及管理该事件的导航控制器)负责。
controllerA
应该关心的是根据屏幕外发生的任何更改更新自己的视图,这些更改应该由
controllerB
和任何其他可能在过程中处于活动状态的视图控制器记录在模型中。

我建议您使用AglaiaZ建议的通知中心这样做。但是,如果您对使用NotificationCenter感到不舒服,那么可以在viewController中使用ViewWillAppearch委托方法尝试这个更基本的解决方案,您可以从中跟踪您是否从B VC回来。那么,我们走吧

在当前视图控制器类中设置此变量,当按下特定视图控制器上的“后退”按钮时,要在其中触发方法,让我们调用该特定视图控制器B VC

let isFromBViewController = false
然后在代码块中触发到bvc的转换,将这个变量设置为true

func goToBViewController() { // This method is triggering transition from A VC to B VC
isFromBViewController = true }
然后在ViewWillAppease委托方法中检查触发到B VC转换的当前VC是否从B VC出现

override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)

if isFromBViewController {
    // code for doing something when you got back from B VC

    isFromBViewController = false
}}
就这样

但是,我再次建议您使用@AglaiaZ建议的通知中心,本教程很简单,通过本教程,我还学习了如何使用通知中心以及如何创建和使用自定义通知


祝你好运。

我不明白。你能再解释一下吗?或者显示一些代码如何按下当前不在窗口中的控制器按钮??Thx获取答案。我在B视图控制器中有一个后退按钮,当我按下它时,我想调用视图控制器中的一个函数。太好了,所以在这种情况下,B视图控制器不应该对视图控制器什么都不做。您有两个简单的解决方案,请查看@AglaiaZ关于通知中心的链接,一点也不复杂。或者只是在视图中跟踪控制器A在视图中将出现代理方法当VC出现时,它是来自VC B。我将发布另一个解决方案的新答案。听起来第二种方法是我需要的。提前点击Thx。检查我的新答案。当我按下controllerB中的后退按钮并调用ControllerA中的函数时,我可以使用委托方法吗?委托是人们经常使用的一种模式,但使用共享数据模型可以说更好。如果两个控制器共享一个模型对象,则它们可以在调用自己的
视图时更新自己,也可以在发生更改时更新模型,或者至少在调用
视图时更新模型。这就免除了他们之间直接交谈的需要,这使得在不影响其他人的情况下更改应用程序的一部分变得很容易。