Monotouch,UIPopover和举办活动

时间:2012-07-12 12:08:46

标签: c# xamarin.ios uikit uipopovercontroller

我是Monotouch的新手,但我在遥远的过去做过一些目标C.我正试图弄清楚如何做到以下几点:

  1. 我有一个带有Naviagtion Bar和按钮的ViewController。
  2. 当我点击按钮时,我想要一个可能有桌面视图或按钮的UIPopOver。
  3. 我正在尝试解决的是如何从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);
    

    如何附上代表?

    感谢

    麦克

2 个答案:

答案 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(...);