gpt4 book ai didi

ios - iOS上观察多个同类型 Controller 后,如何一键回到上一个 Controller ?

转载 作者:塔克拉玛干 更新时间:2023-11-02 10:21:00 25 4
gpt4 key购买 nike

我们在 iOS 项目上使用 MvvmCross 4.4.0,我遇到了以下问题:

  • 我需要引用其他实现“项目”页面“项目”页面;
  • 我需要从任何“项目” 页面到上一个 Controller (“目录” Controller )的即时返回导航。

图表:

目录 --ConcreteItem--> Item1 --MoreItems--> Item2 --MoreItems-->

项目 3 --BackNavButton--> 目录。

我正在自定义 ViewPresenter 中执行以下操作:

                var topViewController = ParentRootViewController.TopViewController;
ParentRootViewController.PushViewController(currentViewController, needAnimation);

if (topViewController.GetType() == currentView.GetType()
&& /*Logic to determine if its correct view types*/)
{
topViewController.RemoveFromParentViewController();
topViewController.Dispose();
}

实际上它一直有效,直到我没有返回到“目录” 页面。问题是我需要多次点击返回按钮,我点击了“项目” 页面上的“更多” 按钮。此外,如果我们在 "Catalogue""Item" 页面中使用带有此类代码的自定义后退按钮:

  if (NavigationController?.NavigationBar?.BackItem != null)
{
var backbutton = new UIBarButtonItem(" ",
UIBarButtonItemStyle.Plain,
(sender, e) => { NavigationController?.PopViewController(true); })
{
Image = UIImage.FromBundle("BackButtonImage")
};

NavigationItem.LeftBarButtonItem = backbutton;
}

当点击 “目录” 页面上的 “后退” NavButton 时应用程序崩溃,使用 lambda

(sender, e) => { NavigationController?.PopViewController(true);

处置对象ItemPageViewController

问题是:如何在 MvvmCross 中正确实现“SingleTop”页面?

或者

如何解决这个问题?

P.S.:如果从 MvxPresenter 中删除行

topViewController.Dispose();

然后在自定义 lambda 中会抛出 NullReferenceException。

P.P.S.:我相信这是我没有从导航堆栈中删除 Controller 的问题。我试图在自定义 View 演示器中删除 Controller ,但是,首先,它有时在那里为空,即使使用空检查也没有任何帮助。

最佳答案

UINavigationController 有一个函数 PopToViewController(UIViewController viewController, bool animated);

您可以在按下后退按钮时弹出到 ViewController 目录,而不是在 View 类型相同时删除每个 ViewController

UINavigationController 有一个属性 ViewControllers,我们可以使用它来查找 CatalogueViewController

由于您使用的是 MvvmCross,我们将检查 ViewModel 类型。

var catalogueController = NavigationController.ViewControllers.First(c => 
((IMvxIosView)c).ViewModel.GetType() == typeof(CatalogueViewModel));

现在您可以使用函数 PopToViewController 关闭所有 View ,直到 CatalogueController

CurrentNavigationController.PopToViewController(catalogueController, true);

关于ios - iOS上观察多个同类型 Controller 后,如何一键回到上一个 Controller ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51019553/

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