3

MonoTouch.Dialog用のReflectionAPIを使用しています。私が達成したいのは、ユーザーがリストからアイテムを選択したときに、ナビゲーションコントローラーを元に戻したいということです。ユーザーにアイテムをクリックさせたくないので、[戻る]ボタンをクリックして戻ります。

ただし、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機能しないと、そこまで到達できません。私は何かが足りないのですか?誰かが私がどこで間違っているのか見ることができますか?

4

1 に答える 1

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 を使用している場合は、それを行うことはできません。独自のブランチを維持することを気にしない場合 (または、プル リクエストを送信します。これは、私がいくつかのことを行う必要があるためです)、これはかなり良い方法です。

于 2012-09-01T11:10:39.347 に答える