0

我是 Monotouch 的新手,但我在遥远的过去做过一些 Objective C。我正在尝试弄清楚我将如何执行以下操作:

  1. 我有一个带有导航栏和按钮的 ViewController。
  2. 当我单击按钮时,我希望出现一个 UIPopOver,其中可能有一个表格视图或按钮。

我要解决的是如何从放置在 UIPopOver 中的视图中获取委托/事件,以将其事件发送回调用视图。

在 Objective C 中,您在视图中的调用中设置委托,如下所示:

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

那么在 Monotouch 中你是如何做到这一点的呢?如果像这样设置 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) 动态样式。

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 回答