Monotouch:了解委托机制模式
Posted
技术标签:
【中文标题】Monotouch:了解委托机制模式【英文标题】:Monotouch: understand the delegate mechanism pattern 【发布时间】:2011-03-02 08:49:29 【问题描述】:我没有完全理解 monotouch 中的委托机制。谁能帮我理解这个概念?
问题很简单。我将尝试在 Monotouch 中映射我在 Objective C 中所做的工作。
例如,假设我在 MyController
内的 Objective C 中创建了一个 UIPopoverController
。在 Objective C 中,代码如下:
@interface MyController : UIViewController <UIPopoverControllerDelegate>
// ...
// ...
@end
在MyController
内部,我可以创建UIPopoverController
,如下所示:
UIPopoverController *popover = // ...
popover.delegate = self;
最后是委托中使用的方法。
那么,Monotouch 呢?
通过这段代码,我可以在 MyController
类中实例化 UIPopoverController
,该类在特定的 TouchUpInside 事件处理程序中扩展 UIViewController
:
popover = new UIPopoverController(new CustomController());
popover.PopoverContentSize = new SizeF(200f, 200f);
popover.PresentFromRect(button.Frame, containerForButtonView, UIPopoverArrowDirection.Left, true);
附:一个重要的方面是将 popover 引用作为成员类而不是作为处理程序中的局部变量,因为 monotouch GC 运行良好!!!
提前谢谢你。
【问题讨论】:
我的第一个解决方案有效。我已经实现了一个扩展 UIPopoverControllerDelegate 的 CustomPopoverController。然后我添加了该控制器的一个实例作为 popover.delegate。是否可以作为委托 MyController 或 CustomController? 您的解决方案看起来如何?我能看到的唯一事件是DidDismiss
和 WillReposition
... 没那么多。
【参考方案1】:
这确实与 C# 有关,而不是 MonoTouch 本身。在 MonoTouch 中,UIPopoverControllerDelegate
是一个类,而 C# 不允许多重继承,因此您无法使用 Obj-C 一对一地翻译代码。虽然有一个更简单的方法(下面的代码可以编译,但显然不起作用):
public class MyController: UIViewController
public void mymethod()
var popover = new UIPopoverController();
popover.DidDismiss += HandlePopoverDidDismiss;
popover.PopoverContentSize = new SizeF(200f, 200f);
popover.PresentFromRect(button.Frame, containerForButtonView, UIPopoverArrowDirection.Left, true);
void HandlePopoverDidDismiss (object sender, EventArgs e)
Console.WriteLine("Working!");
如您所见,您可以将事件处理程序添加到弹出窗口中的DidDismiss
事件,这将执行您想要的操作。一般来说,在 Obj-C 中由所有控件中的委托处理的所有事件都可以这样使用。也可以内联编写方法,如下所示:
popover.DidDismiss += delegate
//dosomething
;
希望这是您正在寻找的。p>
【讨论】:
【参考方案2】:这并不能回答您特定于您的UIPopovercontroller
的问题我想您会发现this link from the Monotouch Docs useful. 它解释了Objective-C 委托和C# 委托与Monotouch 相关的区别。关于您的具体问题,我没有时间编写一个快速测试用例来完全理解它,但我想我会发布该链接,以便您同时阅读一些内容!
【讨论】:
以上是关于Monotouch:了解委托机制模式的主要内容,如果未能解决你的问题,请参考以下文章