Xamarin新手求助:如何判断当前ViewController是被Push还是Present?
判断ViewController是Push还是Present的方法
嘿,作为刚接触Xamarin.iOS的新手,这个问题确实挺容易卡壳的!我当初找了好久才摸清楚门道,现在把靠谱的方法分享给你~
核心判断逻辑
我们可以通过ViewController的两个关键属性来区分两种跳转方式:
NavigationController:如果当前VC是被Push到导航栈中的,这个属性会指向对应的导航控制器PresentingViewController:如果当前VC是被Present出来的,这个属性会指向发起Present操作的那个控制器
具体实现代码
首先在你的ViewController类中添加两个判断方法:
// 判断是否是被Push进来的 private bool IsViewControllerPushed() { // 导航控制器存在,且当前VC不是导航栈的根控制器,说明是被Push进来的 return NavigationController != null && NavigationController.ViewControllers.First() != this; } // 判断是否是被Present出来的 private bool IsViewControllerPresented() { // PresentingViewController不为空,说明是被Present出来的 return PresentingViewController != null; }
然后在需要执行返回操作的地方(比如点击返回按钮),根据判断结果执行对应的操作:
// 示例:点击返回按钮时的处理 private void OnBackButtonClicked(object sender, EventArgs e) { if (IsViewControllerPushed()) { // 被Push进来的,执行Pop操作 NavigationController.PopViewController(true); } else if (IsViewControllerPresented()) { // 被Present出来的,执行Dismiss操作 DismissViewController(true, null); } }
额外注意点
如果遇到导航控制器被整体Present的情况(比如把UINavigationController作为Present的目标),这时候栈内的VC的PresentingViewController会是null,但导航控制器本身的PresentingViewController不为空。如果需要关闭整个页面,你可能需要判断导航控制器是否被Present,再执行Dismiss:
if (NavigationController?.PresentingViewController != null) { NavigationController.DismissViewController(true, null); }
内容的提问来源于stack exchange,提问作者user6159419
相关产品推荐
相关产品推荐

