在目标视图控制器中检测导航弹出
Detect navigation pop in destination view controller
在Xamarin.iOS中使用UINavigationController
(目标iOS 11/12)我想在目的地视图中检测当我被导航 返回 到 - 即流行音乐时的控制器。当目的地 VC 第一次被 推送 时,我特别想 exclude/detect。
明确地说,假设我们已经从 A 导航到 C,然后返回 B:
[A] -(push)-> [B] -(push)-> [C] -(pop)-> [B]
我想 detect/discriminate - in B - 在 A -> B
的初始推送和 C -> B
的后续弹出之间。
从概念上讲,这与 and 提出的问题相同,我应该 - 显然 - 能够在 ViewWillAppear()
但是,在尝试了两个链接问题(以及其他一些问题)中的方法后,我没有看到这些属性的预期值;他们总是 False
,View.Window
总是 null
。
这是 Xamarin.iOS 特有的怪癖,还是我遗漏了什么?如果它与 Xamarin 相关,是否有解决方法?如果没有,是否有人有此检测工作的基本 C# 示例?
我不想在导航控制器(或委托,或个人 VCs)中维护状态,因为应用程序结构将来可能会发生变化。但是,使用导航控制器或委托指示导航方向(弹出与推送)到目的地 VC - 'B' 的解决方案是可以接受的。
如果您想操纵导航操作,isMovingToParentViewController
应该可以。将它放在你的 B 控制器的视图中将出现生命周期事件:
public override void ViewWillAppear(bool animated)
{
base.ViewWillAppear(animated);
if (IsMovingToParentViewController)
{
// Come from A
}
else
{
// Pop from C
}
}
这是效果,我在iOS12:
上测试过
另一种检测方法是:
当你想从 A 推送 B 时,你必须初始化一个新的 B 来推送,这样 B 的 ViewDidLoad
事件将被调用。从 C 弹出时,B 已经存在于您的导航堆栈中,因此 ViewDidLoad
不会被触发。
在Xamarin.iOS中使用UINavigationController
(目标iOS 11/12)我想在目的地视图中检测当我被导航 返回 到 - 即流行音乐时的控制器。当目的地 VC 第一次被 推送 时,我特别想 exclude/detect。
明确地说,假设我们已经从 A 导航到 C,然后返回 B:
[A] -(push)-> [B] -(push)-> [C] -(pop)-> [B]
我想 detect/discriminate - in B - 在 A -> B
的初始推送和 C -> B
的后续弹出之间。
从概念上讲,这与 ViewWillAppear()
但是,在尝试了两个链接问题(以及其他一些问题)中的方法后,我没有看到这些属性的预期值;他们总是 False
,View.Window
总是 null
。
这是 Xamarin.iOS 特有的怪癖,还是我遗漏了什么?如果它与 Xamarin 相关,是否有解决方法?如果没有,是否有人有此检测工作的基本 C# 示例?
我不想在导航控制器(或委托,或个人 VCs)中维护状态,因为应用程序结构将来可能会发生变化。但是,使用导航控制器或委托指示导航方向(弹出与推送)到目的地 VC - 'B' 的解决方案是可以接受的。
如果您想操纵导航操作,isMovingToParentViewController
应该可以。将它放在你的 B 控制器的视图中将出现生命周期事件:
public override void ViewWillAppear(bool animated)
{
base.ViewWillAppear(animated);
if (IsMovingToParentViewController)
{
// Come from A
}
else
{
// Pop from C
}
}
这是效果,我在iOS12:
上测试过另一种检测方法是:
当你想从 A 推送 B 时,你必须初始化一个新的 B 来推送,这样 B 的 ViewDidLoad
事件将被调用。从 C 弹出时,B 已经存在于您的导航堆栈中,因此 ViewDidLoad
不会被触发。