0

私はモノタッチは初めてですが、遠い過去にObjective Cをいくつかやったことがあります。私は次のことをどのように行うかを考え出そうとしています:

  1. Naviagtion Bar とボタンを備えた ViewController があります。
  2. ボタンをクリックすると、テーブルビューまたはボタンが含まれている可能性のある UIPopOver が表示されます。

私が解決しようとしているのは、UIPopOver に配置したビューからデリゲート/イベントを取得して、そのイベントを呼び出し元のビューに送り返す方法です。

Objective C では、ビューの呼び出しでデリゲートを次のように設定します。

 UIPopoverController *popover = 
        [[UIPopoverController alloc] initWithContentViewController:myPopOverViewcontrol]; 
    popover.delegate = self;

では、モノタッチではどのように同じことを行うのでしょうか? 次のように UIPopOver を設定した場合:

UIPopoverController myPopOver = new UIPopoverController(new myPopOverViewControl());
myPopOver.PopoverContentSize = new SizeF(200f, 300f);
myPopOver.PresentFromRect (btnButton.Frame, v, UIPopoverArrowDirection.Up, true);

どのようにデリゲートを添付しますか?

ありがとう

マイク

4

2 に答える 2

4

(a) C# イベント スタイル、(b) 厳密に型指定された/コード補完を認識するスタイル、(c) 動的スタイルの 3 つのスタイルから選択できます。

C# イベント スタイルは次のようになります。

popover.DidDismiss += (sender, args) {
   Console.WriteLine ("Dismissed!");
}

上記のアプローチを使用する場合、そのオブジェクトでのみ C# イベントを使用する必要があり、同じオブジェクト内で混在させることはできません。

厳密に型指定されたコード補完対応スタイルは次のとおりです。

popover.Delegate = new MyUIPopoverControllerDelegate ();

[...]

class MyUIPopoverControllerDelegate : UIPopoverControllerDelegate {
     public override void DidDismiss (UIPopoverController popoverController);
}

また、動的スタイルはパラメーター チェックを実行せず、間違いを警告することもありません。これは、Objective-C で行うことと非常によく似ています。また、Objective-C セレクターからメソッドへのバインディングを手動で把握する必要があります。

popover.WeakDelegate = this;

[...]

[Export ("popoverControllerDidDismissPopover:")]
void dismissed (UIPopoverController controller)
{
    Console.WriteLine ("Dismissed");
}
于 2012-07-12T14:13:49.177 に答える
0

MonoTouch では、おそらくDidDismissイベントにアタッチします。

var pop = new UIPopoverController();
pop.DidDismiss += (sender, args) => Console.WriteLine("Popover '{0}' was dismissed", (UIPopoverController)sender);
pop.PresentFromBarButtomItem(...);
于 2012-07-12T12:26:35.120 に答える