gpt4 book ai didi

c# - 如何将 MonoTouch.Dialog View 封装到 View Controller 中?

转载 作者:可可西里 更新时间:2023-11-01 03:30:15 24 4
gpt4 key购买 nike

我正在编写一个 View Controller 来向我的应用程序添加一个新项目。它非常适合 MonoTouch.Dialog,因为它可以通过基于表格的界面轻松完成,每个项目的相关属性都有一个字段。

这是我目前用于显示添加项目 View 的代码(经过简化,但核心思想仍然存在):

Item item = new Item();
TapHandler handler = new TapHandler();
BindingContext bc = new BindingContext(handler, item, "Add Item");
DialogViewController dv = new DialogViewController(bc.Root, true);
this.NavigationController.PushViewController(dv, true);

虽然这行得通,但我更愿意将 View 的细节封装到它自己的 View Controller 中,这样代码就可以如下所示:

UIViewController controller = new AddItemViewController();
this.NavigationController.PushViewController(controller, true);

但是,我不知道如何实现它。我认为合乎逻辑的做法是创建 DialogViewController 的子类。但是,DialogViewController 的所有构造函数都需要一个 RootElement。为此,您需要首先创建 BindingContext。由于您无法在调用基本构造函数之前运行任何代码,因此它最终无法正常工作。

我的第二种方法是实现 UIViewController 的子类,创建 DialogViewController,然后使用 this 添加对话框 View Controller 作为我的子类的子类。 AddChildViewController(dv)this.View.AddSubView(dv.View)。虽然这最初有效,但如果您在 UINavigationController 中有新的 View Controller ,并且单击日期元素,日期 View 将显示为模式弹出窗口而不是导航 Controller 层次结构中。 (这是有道理的,因为 DialogViewController 不是此设计中 NavigationController 层次结构的一部分)。

从那里我被困住了。我在示例中也找不到像这样使用 MonoTouch.Dialog 的任何示例。这可能吗?或者,如果不是,是否有充分的理由说明为什么编写这样的代码不是一个好主意?

最佳答案

As you can't run any code before calling the base constructor

这不太正确。

这并不理想,但您可以从 DialogViewController 继承并为其提供一个空的 RootElement 实例,如下所示:

public class AddItemViewController : DialogViewController {
public AddItemViewController () : base (new RootElement ()) { }
}

稍后您可以将您的东西(或设置新的 RootElement)添加到 Root 属性,例如

void Populate ()
{
this.Root.Add (new Section () { ... });
}

关于c# - 如何将 MonoTouch.Dialog View 封装到 View Controller 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9784142/

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