我是Monotouch的新手,但我在遥远的过去做过一些目标C.我正试图弄清楚如何做到以下几点:
我正在尝试解决的是如何从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);
如何附上代表?
感谢
麦克
答案 0 :(得分: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");
}
答案 1 :(得分:0)
在MonoTouch中,您可能会附加到DidDismiss
事件:
var pop = new UIPopoverController();
pop.DidDismiss += (sender, args) => Console.WriteLine("Popover '{0}' was dismissed", (UIPopoverController)sender);
pop.PresentFromBarButtomItem(...);