3

我正在使用 MonoTouch.Dialog 的反射 API。我想要完成的是,当用户从列表中选择一个项目时,我希望导航控制器返回。我不想强迫用户点击一个项目,然后点击返回按钮返回。

但是,当尝试使用该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();
    });
}

演示类

public enum DemoEnum
{
    SomeValue,
    AnotherValue,
    YetAnotherValue
}

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

我知道如何使用导航控制器导航回来,但如果没有OnTap工作,我就无法走得那么远。我错过了什么吗?谁能看到我哪里出错了?

4

1 回答 1

1

一句话,你不能。

枚举(会产生一个新的 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 };

没有向 RadioElement 添加触发器。您需要将其更改为自动弹出表单 - 这需要一个新的/更改的 RadioElement

https://gist.github.com/3569920

(我无法声明此代码 - 它来自@escoz:https ://github.com/escoz/MonoMobile.Forms )

所以,如果你使用的是内置的 MT.D,你就不能这样做。如果您不介意维护自己的分支(或者,提交一个拉取请求,这是我需要做的一些事情),那么这是一个相当不错的方法。

于 2012-09-01T11:10:39.347 回答