我正在使用Reflection API for MonoTouch.Dialog。我想要完成的是,当用户从列表中选择一个项目时,我希望导航控制器返回。我不想强迫用户单击某个项目,然后单击“返回”按钮返回。
但是,在尝试使用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
工作,我就无法做到这一点。我错过了什么吗?谁能看到我哪里错了?
答案 0 :(得分:1)
总之,你不能。
Enum(导致一个新的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,则无法执行此操作。如果你不介意维护自己的分支(或者提交拉回请求,这是我需要做的一些事情),那么这是一个相当不错的方法。