2012-07-12 43 views
0

我是Monotouch的新手,但我在遥远的过去做了一些Objective C。我试图弄清楚我将如何执行以下操作:Monotouch,UIPopover并获得事件

  1. 我有一个带有Naviagtion Bar和按钮的ViewController。
  2. 当我点击按钮,我想要一个UIPopOver出现,它可能有一个tableview或按钮。

我想解决的是我如何从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

您可以选择三种样式:(1)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"); 
} 
0

在MonoTouch的你可能会附加到DidDismiss事件:

var pop = new UIPopoverController(); 
pop.DidDismiss += (sender, args) => Console.WriteLine("Popover '{0}' was dismissed", (UIPopoverController)sender); 
pop.PresentFromBarButtomItem(...);