如何在视图控制器中触发协议功能?
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-自带的一些功能,基本用法(视图,触发器,事务,存储过程,函数,流程控制)