我正在寫一個視圖控制器,用於將新項目添加到我的應用程序。它非常適合MonoTouch.Dialog,因爲它可以使用基於表格的界面輕鬆完成,每個項目的相關屬性都有一個字段。如何將MonoTouch.Dialog視圖封裝到視圖控制器中?
這是我目前用於顯示添加項目視圖的代碼(簡化,但其核心思想依然是):
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);
雖然這樣的作品,我寧願如果我能封裝視圖的細節到自己視圖控制器,所以代碼看起來是這樣的:
UIViewController controller = new AddItemViewController();
this.NavigationController.PushViewController(controller, true);
但是,我想不出如何實現這一點。我認爲合乎邏輯的事情是做一個DialogViewController
的子類。然而,DialogViewController
的所有構造函數都需要一個RootElement
。爲了得到這個,你需要首先創建BindingContext
。由於在調用基礎構造函數之前無法運行任何代碼,因此不會最終生效。
我的第二個方法是實現子類UIViewController
,創建DialogViewController
,和添加對話框視圖控制器使用this.AddChildViewController(dv)
和this.View.AddSubView(dv.View)
我的子類的孩子。雖然這最初起作用,但如果您在UINavigationController中有新的視圖控制器,並且您單擊一個日期元素,則日期視圖將顯示爲模式彈出窗口而不是導航控制器層次結構。 (這是有道理的,因爲DialogViewController
不是此設計中的NavigationController
層次結構的一部分)。
從那裏我卡住了。在示例中,我找不到任何使用MonoTouch.Dialog的例子。這可能嗎?或者,如果不是這樣,爲什麼編寫這樣的代碼是一個壞主意,是否有充分的理由?
謝謝,我沒有想到在構造函數中手動使用Root元素。我通過在構造函數中設置一個新的Root元素,讓我自己的答案適用於反射api。 – 2012-03-20 23:47:06