2012-08-27 37 views
2

我正在使用MonoTouch.Dialog的Reflection API。我想要完成的是,當用戶從列表中選擇一個項目時,我希望導航控制器返回。我不想強制用戶點擊一個項目,然後點擊返回按鈕返回。MonoTouch對話框 - OnTap不工作

但是,當試圖使用OnTap屬性時,我的方法沒有得到執行。

public override bool FinishedLaunching (UIApplication app, NSDictionary options) 
{ 
    window = new UIWindow (UIScreen.MainScreen.Bounds); 

    var demo = new DemoClass(); 
    var context = new BindingContext(this, demo, "Some Demo"); 
    var controller = new DialogViewController(context.Root); 
    var navController = new UINavigationController(controller); 

    window.RootViewController = navController; 
    window.MakeKeyAndVisible(); 

    return true; 
} 

public void EnumSelected() 
{ 
    InvokeOnMainThread(() => 
    { 
     new UIAlertView("Dialog", "Enum Selected", null, "OK", null).Show(); 
    }); 
} 

DemoClass

public enum DemoEnum 
{ 
    SomeValue, 
    AnotherValue, 
    YetAnotherValue 
} 

public class DemoClass 
{ 
    [OnTap("EnumSelected")] 
    public DemoEnum SomeEnum; 
} 

我知道如何導航回到與導航控制器,但沒有OnTap工作,我不能走到這一步。我錯過了什麼嗎?任何人都可以看到我要去哪裏嗎?

回答

1

總之,你不能。

除非您手工完成,否則Enum's(會導致一個新的RootController和一堆RadioElement)不能設置OnTap。

https://github.com/migueldeicaza/MonoTouch.Dialog/blob/master/MonoTouch.Dialog/Reflect.cs#L337

尤其,這些位:

csection.Add (new RadioElement (ca != null ? ca.Caption : MakeCaption (fi.Name))); 

element = new RootElement (caption, new RadioGroup (null, selected)) { csection }; 

沒有觸發加到放射性元素。 /改變放射性元素

https://gist.github.com/3569920

(我不能說這個代碼 - 它來自@escoz:https://github.com/escoz/MonoMobile.Forms),它需要一個新的 - 你需要將其更改爲自動彈出形式

所以,如果你正在使用內置的MT.D,你不能這樣做。如果你不介意維護自己的分支(或者提交一個pull請求,這是我需要做的幾件事情),那麼這是一個相當不錯的方法。