gpt4 book ai didi

c# - 如何分配 UIPopoverPresentationControllerDelegate

转载 作者:行者123 更新时间:2023-11-29 12:05:47 25 4
gpt4 key购买 nike

我尝试使用 UIPopoverPresentationController。对于演示,我需要分配委托(delegate) (UIPopoverPresentationControllerDelegate) 才能使用 prepareForPopoverPresentation 等方法
popoverPresentationControllerDidDismissPopover
等等。

如果将 View Controller 分配给我得到的委托(delegate)属性

Error CS0266 Cannot implicitly convert type 'UIKit.UIViewController' to 'UIKit.IUIPopoverPresentationControllerDelegate'. An explicit conversion exists (are you missing a cast?)

那么我的选择是什么?在原生世界中,可以添加所需的协议(protocol),但你不能在 Xamarin 中这样做。我希望弹出窗口中显示的 View Controller 收到通知(准备、关闭、...)。我该怎么做?

当然我可以创建一个新的 UIPopoverPresentationControllerDelegate 实例并分配给它,但之后我会以某种方式(例如通过事件)将委托(delegate)与 View Controller 连接起来。有更简单的解决方案吗?

最佳答案

编辑

看起来 Xamarin 没有公开 WeakDelegate 属性,并且还使委托(delegate)类成为协议(protocol)的抽象类,而不是接口(interface)。在这种情况下 - 您将必须创建另一个实现 UIPopoverPresentationControllerDelegate 的类和另一个用于 UIPopoverControllerDelegate 的类。

在未来,值得注意的是,通常会有一个 WeakDelegate 属性(以及 Delegate),它允许将任何类分配给委托(delegate)并通过隐式实现协议(protocol)ExportAttribute 关于协议(protocol)方法。 Xamarin 有时还会使用协议(protocol)的匹配接口(interface)(例如 IUIPopoverPresentationControllerDelegate)而不是匹配的抽象类(UIPopoverPresentationControllerDelegate 类)。


原始答案大多不正确

您的 UIViewController 类应该可以实现 IUIPopoverControllerDelegate 并实现您需要的任何方法。通常 iOS 协议(protocol)会转换为 Xamarin.iOS 的接口(interface),您可以通过在协议(protocol)名称后附加“I”来找到它。

public class TestVC : UIViewController, IUIPopoverControllerDelegate
{
public override UIPopoverPresentationController PopoverPresentationController {
get {
return base.PopoverPresentationController;
}
}

[Export ("popoverControllerDidDismissPopover:")]
public void DidDismiss (UIPopoverController popoverController)
{
throw new NotImplementedException ();
}
}

这是一个示例,其中我实现了一些弹出方法。我希望这有帮助。我没有明确测试过这个,但我认为它应该有效。如果没有,请告诉我。

关于c# - 如何分配 UIPopoverPresentationControllerDelegate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35084095/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com