ipad - 单点触控崩溃: Replace UINavigationController A with B and Push UiViewControllers on B

标签 ipad uinavigationcontroller xamarin.ios uistoryboard

我们使用 Xamarin 一段时间了,它在开发最新的 iPad 应用程序时导致了奇怪的崩溃。问题如下:

ipad 应用程序使用带有 2 个导航 Controller (例如 A 和 B)的 Storyboard,每个 Controller 都有一个 RootViewCOntroller(例如 A1 和 B1),其中 A 作为默认 NavController,并在 APP 启动时显示。 A1 上有 2 个按钮,按下按钮 1 会加载 NavController B。以下是单击 NavController A 上的按钮 1 时代码执行的步骤。

在按钮事件处理程序中,我调用 AppDelegate 中的公共(public)函数,该函数执行以下操作:

  • 获取 StoryBoard iD 并使用 Storyboard.InstantiateViewCOntroller 实例化 NavController B。
  • 从其 super View 中删除 NavCOntroller A(使用 UIView.View.RemoveSuperView())
  • 将上述 B 引用分配给 appdelegate 窗口的 Root View Controller (它加载 NavCOntroller B 的 Root View Controller B1)。

在执行上述步骤之前一切正常(我可以在 iPad 上看到 rootviewcontroller 的 UiView 加载)。

下一步我尝试在实例化后推送另一个 UiViewController。(因为我的目标是 2 显示层次结构中的第二个屏幕)(storyboard.InstantiateViewController(标识符)。理想情况下,这应该向我显示推送的 View Controller 。但是执行此步骤后应用程序崩溃。!!奇怪!!!! 以下是简化的代码:

public void SetNavControllerB(UINavigationController navA, UiStoryBoard StoryBoard)
{
   navA.View.RemoveFromSuperView();

   this.Window.RootViewController = (UiNavigationController)StoryBoard.InstantiateViewController("VC0");
   // 'VC0' is the identifier for NavigationController B with RootViewController as "VC1"

  // It works great till the above step

   UiViewController vc2 = (UiViewController)StoryBoard.InstantiateViewController("VC2");
   ((UINavigationController)this.Window.RootViewController).PushViewController(vc2, true);

   //The above executes with out any exception, but it crashes later.
}

请帮忙!!!!!!

最佳答案

如果您要修改 UINavigationController 中的堆栈,而不是推送或弹出,那么您需要替换其整个 Controller 堆栈:

myNavController.SetViewControllers(new UIViewController[] { controller1, controller2 }, true);

如果您在上一次推送或弹出完成之前尝试推送或弹出,那么您将在控制台输出中收到崩溃和警告。

PS - 我认为您不需要在您的情况的任何地方调用 RemoveFromSuperview,您应该只修改 UINavigationController 的 堆栈或替换 RootViewController 在您的窗口上。

关于ipad - 单点触控崩溃: Replace UINavigationController A with B and Push UiViewControllers on B,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14736055/

相关文章:

ios - 所有 iPad 版本的内存警告阈值

ios - 为 IPAD Air 获取不正确的屏幕分辨率

ios - 后退按钮在 UISplitViewController 上闪烁 -> 细节 segue

c# - 如何在 xamarin ios C# 中以编程方式触发 UIButton 的 TouchUpInside

ios - 无法从 Zend 服务器加载图像

ios - UITableView 与 UITextView 滚动问题

ios - 在导航 Controller 中的 View 之间跳转

ios - 从侧面菜单中选择项目时打开特定的 ViewController?

ios - 我如何直观地表明 UIAlertView 是重要的?

ios - UIWebView pich to zoom 在 iPhone 5.0 模拟器上工作但在 iPhone 4.3 和 iPad 4.3、5.0 模拟器上不起作用?