我想在Xamarin.iOS中使用UINavigationController
(定位到iOS 11/12),当我导航到 back时,我想在目的地视图控制器中进行检测至-即流行音乐。我特别想排除/检测目标VC第一次被按下的时间。
为了明确起见,假设我们已经从A导航到C,然后又回到B:
[A] -(push)-> [B] -(push)-> [C] -(pop)-> [B]
我想检测/区分B中的 -从A -> B
的初始推送到C -> B
的后续弹出之间。
从概念上讲,这与所提出的问题here和here是相同的,而且显然-我应该能够使用isMovingToParentViewController
/ IsBeingPresented
/ {{1 }}在View.Window
中进行了尝试,但是在尝试了两个链接问题(以及其他一些事情)中的方法之后,我没有看到这些属性的期望值;它们总是ViewWillAppear()
,而False
总是View.Window
。
这是Xamarin.iOS特有的怪癖,还是我缺少某些东西?如果与Xamarin有关,是否有解决方法?如果没有,那么有人没有这种检测工作的准C#示例吗?
我希望不必在导航控制器(或委托或单个VC)中保持状态,因为将来应用程序结构可能会更改。但是,使用导航控制器或委托来指示到目标VC的导航方向(弹出或推入)的解决方案-上面的“ B”是可以接受的。
答案 0 :(得分:0)
如果要操纵导航操作,isMovingToParentViewController
应该可以工作。将其放在B控制器的视图中将出现生命周期事件:
public override void ViewWillAppear(bool animated)
{
base.ViewWillAppear(animated);
if (IsMovingToParentViewController)
{
// Come from A
}
else
{
// Pop from C
}
}
这是效果,我在iOS 12上进行了测试:
另一种检测方法是:
当您要从A推送B时,必须初始化一个新的B以便推送,这样才能调用B的ViewDidLoad
事件。从C弹出时,B已存在于您的导航堆栈中,因此不会触发ViewDidLoad
。