嵌套的Monotouch对话框RootElement视图中缺少后退按钮

时间:2015-05-28 10:41:39

标签: mvvmcross monotouch.dialog

我有两个级别的嵌套RootElements,并且两个级别都没有后退按钮。

要明确的两件事

  1. 是的,我正在覆盖DialogViewController并设置"推送"为真
  2. 我在我的 MvxViewController 中添加了DialogViewController的视图作为 SubView ,而不是使用DialogViewController作为我的主控制器
  3. 我的ViewController中有很多SubView,包括UITableView和自定义UIView。我想使用方便的控制器嵌套,MT D给我嵌套的RootElements,所以我将DialogViewController.View作为SubView插入。

    我手写创建RootElements和Sections

    RootElement filtersListRootElement = new RootElement("Filters");
    Section filterTypes = new Section();
    RootElement filterRootElement = new RootElement("Filter Options");
    RootElement byDateRoot = new RootElement("Date");
    RootElement byCategoryRoot = new RootElement("Category");
    
    filterRootElement.Add(new Section());
    filterRootElement.Sections.First().Elements.Add(byDateRoot);
    filterRootElement.Sections.First().Elements.Add(byCategoryRoot);
    
    byDateRoot.Add(new Section("Some Stuff"));
    byDateRoot.Sections.First().Elements.Add(new CheckboxElement("Yesterday"));
    byDateRoot.Sections.First().Elements.Add(new CheckboxElement("Last Week"));
    byDateRoot.Sections.First().Elements.Add(new CheckboxElement("Last 6 months"));
    byDateRoot.Sections.First().Elements.Add(new CheckboxElement("2 years"));
    
    byCategoryRoot.Add(new Section());
    byCategoryRoot.Sections.First().Elements.Add(new CheckboxElement("Medications"));
    byCategoryRoot.Sections.First().Elements.Add(new CheckboxElement("Lifestyle"));
    byCategoryRoot.Sections.First().Elements.Add(new CheckboxElement("Tests"));
    
    filterTypes.Elements.Add(filterRootElement);
    filtersListRootElement.Sections.Add(filterTypes);
    

    然后我将View提取到我的主ViewController中,就像这样

    DialogViewController filtersListDvc =
        new DialogViewController(UITableViewStyle.Plain, filtersListRootElement, true);
    this.AddChildViewController(filtersListDvc);
    this.View.AddSubview(filtersListDvc.View);
    filtersListDvc.DidMoveToParentViewController(this);
    

    这会按预期显示Elements,我可以深入查看每个RootElement。然而,没有一个视图有后退按钮,我不明白为什么

1 个答案:

答案 0 :(得分:0)

原因是我们使用DialogViewController的View的方式。获取UINavigationController以推动ViewController查看其ParentViewController(as you can see here)的代码。

然而正如问题所述,我们将DialogViewController的View提升到我们的ViewController,这是异常使用。以下是Monotouch Dialog(MT D)中的代码。检查set datefirst 1 select [WkNo]= DATEPART(week,dt.DT) 的代码不是null总是发现它为null,因为在我们的用例中UINavigationController是另一个级别

nav

我们在MVVMCross中使用了一个Fork of MT D,这使ActivateController变为虚拟,所以我们覆盖它并将寻找UINavigationController的代码更改为

public void ActivateController (UIViewController controller)
        {
            dirty = true;

            var parent = ParentViewController;
            var nav = parent as UINavigationController;

            // We can not push a nav controller into a nav controller
            if (nav != null && !(controller is UINavigationController))
                nav.PushViewController (controller, true);
            else
                PresentModalViewController (controller, true);
        }

这会检查父级,如果不合适则会查看父级的父级