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

时间:2018-10-11 19:58:22

标签: ios swift delegates viewcontroller

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()打电话吗?

我在这里错过了什么吗?

3 个答案:

答案 0 :(得分:0)

首先,请执行以下操作:

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

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

答案 1 :(得分:0)

您只需声明委托函数的工作方式,您尚未调用它。 根据上下文,您可以决定何时呼叫delegate.printMe(_ text : "Foo")

我建议您参考一个简单的示例:passing data back to previous view controller from current view controller using delegate

答案 2 :(得分:0)

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

weak var delegate: DeviceTableViewCellDelegate?

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

override func viewDidLoad(){
   delegate = self
}

现在让我们说当按下某个按钮时需要调用协议方法。因此,您需要做的就是在按钮按下方法中调用此方法。

delegate?.printMe("Button Pressed")