gpt4 book ai didi

ios - 如何连接来自 xib 中自定义类的委托(delegate)?

转载 作者:IT王子 更新时间:2023-10-29 05:27:46 25 4
gpt4 key购买 nike

我创建了一个类“DeletableImageView”(.swift + .xib),它使用我通过一个称为委托(delegate)的属性定义为“DeletableImageViewDelegate”的协议(protocol)。

为了清楚起见,示例:

DeletableImageView.swift

protocol DeletableImageViewDelegate {
func deleteImageWithTag(tag: Int!) -> (Bool)
func addImageOnViewWithTag(tag: Int!) -> (Bool)
...
}

class DeletableImageView: UIView {

var view: UIView!
var delegate: DeletableImageViewDelegate?

// Some random methods + some use of the delegate protocol's methods
...
}

我的问题是,现在,当我尝试在关联的 .xib 文件中的 Controller 中使用我的类时(这意味着我在界面构建器中拖放一个 View 并将 DeletableImageView 类分配给该 View )我无法链接委托(delegate)属性(即使我将此属性声明为 IBOutlet)。

我希望能够做的是直接将 View 的委托(delegate)导出链接到 .xib 中的“文件所有者”

当您在 .xib 文件中直接从 TableView 链接数据源和委托(delegate)时,您所做的完全相同。

但是当我控制拖动时,它们不会链接在一起。

有没有人知道发生了什么事?

非常感谢。

最佳答案

您需要做的第一件事是在您的协议(protocol)定义中添加@objc,这样它看起来像:

@objc protocol DeletableImageViewDelegate {
...
}

您可能会问为什么需要这样做。这是因为你想将委托(delegate)属性添加到 Storyboard,为了设置 Storyboard可见的一些属性,它必须有 @IBOutlet 前缀,并且该前缀要求它是 Objective C 协议(protocol)。

所以接下来要做的是将 var delegate: DeletableImageViewDelegate? 更改为

@IBOutlet var delegate: DeletableImageViewDelegate?

现在,如果您右键单击界面构建器中的 View ,您将得到类似这样的内容,这意味着我们将委托(delegate)属性公开给了界面构建器。 Exposed property

如果您尝试将它连接到文件所有者(例如 UIViewController),它将无法工作,因为您的文件所有者仍然没有实现该协议(protocol)。要实现它,您需要编写:

extension UIViewController : DeletableImageViewDelegate {
// Implementation
}

完成之后,您应该能够将委托(delegate)属性连接到 View Controller ,从而接收委托(delegate)方法消息。在每种情况下,您的文件所有者都必须实现该协议(protocol)。

关于ios - 如何连接来自 xib 中自定义类的委托(delegate)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33810444/

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