如何在视图控制器中触发协议功能?

Posted

技术标签:

【中文标题】如何在视图控制器中触发协议功能?【英文标题】:How to trigger protocol function in a view controller? 【发布时间】:2018-10-11 19:58:21 【问题描述】:

DeviceTableViewCell

我在我的自定义 DeviceTableViewCell 上创建了一个协议

protocol DeviceTableViewCellDelegate : NSObjectProtocol 
    func printMe(_ text : String)

我还在

中声明了我的delegate
weak var delegate: DeviceTableViewCellDelegate?

DevicesViewController

我有这个

extension DevicesViewController: DeviceTableViewCellDelegate 
    
   
    func printMe(_ text : String) 
        let text = "Protocol & Delegate"
        
        print("........")
        print(text)
        print("........")
    


我不知道如何触发我的 print() 语句。 怎么触发呢?

我需要给我的printMe() 打电话吗?

我在这里遗漏了什么吗?

【问题讨论】:

哪个类具有delegate 属性(可能是您的单元类)必须在某个适当的时间调用printMe 方法。只有您知道如何使用它以及何时调用它。 您将代理视为占位符。将来,您可以为该委托分配任何角色。 【参考方案1】:

首先,这样做:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 
    let cell = tableView.dequeueReusableCell(withIdentifier: "YourCellIdentifier", for: indexPath) as! DeviceTableViewCell
cell.delegate = self

然后,您必须从您的单元格调用 printMe 来处理您的操作

【讨论】:

【参考方案2】:

你只是声明了委托函数是如何工作的,你还没有调用它。 根据上下文,您可以决定何时调用delegate.printMe(_ text : "Foo")

我建议你可以参考一个简单的例子:passing data back to previous view controller from current view controller using delegate。

【讨论】:

【参考方案3】:

让我们举个例子来理解这个概念。因此,您已经为您的协议创建了委托变量。

weak var delegate: DeviceTableViewCellDelegate?

现在要调用协议方法,您需要将委托分配给某个 viewController 或类。让我们在 viewDidLoad 方法中的同一个视图控制器中分配。

override func viewDidLoad()
   delegate = self

现在假设按下某个按钮时需要调用协议方法。所以你需要做的是在按钮按下方法中像这样调用这个方法。

delegate?.printMe("Button Pressed")

【讨论】:

以上是关于如何在视图控制器中触发协议功能?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 viewcontroller viewdidload 方法触发视图中的功能 - 目标 c - iphone

如何在 Objective-C 中不旋转的视图控制器中检测设备的真实方向?

如何从视图中触发事件(自定义事件)并在 Ext JS 的控制器中处理它们?

Mysql-自带的一些功能,基本用法(视图,触发器,事务,存储过程,函数,流程控制)

如何使用 Swift 协议功能,如 Android 接口监听器实现?

如何在触发退出 segue 之前执行操作?