【问题标题】:Xamarin iOS Back Button Stopped working after navigationXamarin iOS后退按钮导航后停止工作
【发布时间】:2016-09-17 03:57:34
【问题描述】:

我的 UINavigationControllers 后退按钮在离开视图然后返回视图后停止工作并且呈现不正确。

为了使其尽可能简单,我正在加载一个拆分视图,其中详细视图是一个自定义 UINavigationController。没什么特别的,它只是设置导航栏的背景颜色。

// shortcut for our navbar
public class SANavigationController : UINavigationController
{
    public SANavigationController (UIViewController root) : base(root)
    {
        this.NavigationBar.BackgroundColor = AppearanceManager.AccentColor;
    }
    public SANavigationController(IntPtr p) : base(p){}
}

从那里视图被推送到导航控制器堆栈,从一个基本视图开始,该视图是关于我公司存档的特定客户的详细信息。然后,此客户详细信息视图提供指向其他视图的链接,这些视图可以深入了解有关客户的不同方面的更详细信息。

其中一个向下钻取视图存在特定问题。当您第一次导航到它时,一切正常,即 NavigationController 的后退按钮可以正常工作并正确呈现。

但是;当我点击一个将第三个视图推送到堆栈上的按钮然后导航回第二个视图时,后退按钮现在看起来像这样并且没有响应

更奇怪的是,如果我第二次进入第三个视图,后退按钮将隐藏在该视图上,但如果我点击按钮应该显示的位置,它仍然可以工作。然后,如果我导航回第二个视图,该按钮已完全消失并且仍然无响应。

知道可能导致此问题的原因以及如何解决?

【问题讨论】:

  • 如果你删除了自定义 UINavigationController 还会出现这种情况吗?
  • 是的,标准 UINavigationController 仍然会出现问题。此外,还有其他以相同方式推送和弹出的视图没有此问题。
  • 确实很奇怪。您是否尝试在向下钻取时检查 ViewController 上的 NavigationStack? UINavigationController 上的 ViewControllers 属性是您正在寻找的。这有什么不同吗?
  • ViewControllers 属性中包含正确的视图。我确实发现了一个奇怪的现象,看起来 NavigationController.NavigationBar.TopItem 属性设置不正确。在其他视图中,该属性上的ToString() 将显示后退按钮的当前标题以及看起来像十六进制内存地址的内容。在此页面上(从第三页返回后),它显示了我在该属性中所在的当前视图的标题。不知道为什么会这样。

标签: xamarin xamarin.ios


【解决方案1】:

我找到了自己问题的答案。事实证明这是MonoTouch.Dialog.DialogViewController 的一个问题。隐藏后退按钮的视图继承了DialogViewController 并使用(UITableViewStyle style, RootElement root) 构造函数。为了使DialogViewController 与 UINavigationViewController 一起正常工作,您需要调用包含推入 bool (UITableViewStyle style, RootElement root, bool pushing) 的构造函数。所以在我的代码中:

public class My2ndLevelController : DialogViewController
{
     public My2ndLevelController () : base(UITableViewStyle.Grouped, null){}
}

变成了这个

public class My2ndLevelController : DialogViewController
{
     public My2ndLevelController () : base(UITableViewStyle.Grouped, null, true){}
}

事实证明,如果您在搜索词中包含 DialogViewController,谷歌只会显示解释这一点的结果,不幸的是,这只是在我弄清楚如何解决这个问题之后。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-11
    • 2015-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多