我有两个级别的嵌套RootElements,并且两个级别都没有后退按钮。
要明确的两件事
我的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。然而,没有一个视图有后退按钮,我不明白为什么
答案 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);
}
这会检查父级,如果不合适则会查看父级的父级