ios - 如何在 Objective-C 和 Swift 中实现“didSelectButtonInCellAtIndexPath:”?
问题描述
我熟悉“UITableViewDelegate”。
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
是有权力的。
如何在 Objective-C 中实现 "tableView: didSelectButtonInCellAtIndexPath: " ,在 Swift 中也很棒。
如下图:
当单击红色圆圈中的按钮时,我使用自定义 UITableViewCell 委托。
那么如何将 UITableViewCell 委托升级为自定义 UITableView 委托,以优雅地处理事件。
解决方案
这很简单,实际上有几种方法可以实现您想要的:
使用代码块。您可以将代码块作为按钮选择的处理程序,
var buttonSelectionHandler: ((_ index: IndexPath?) -> ())?
并在按钮的选择器上调用它。您可以使用块的参数index
来指示哪个单元格负责该操作,并且不要忘记,您应该在自定义单元格上存储索引路径cellForRowAtIndex
并UITableViewDataSource
具有适当的属性。创建具有您在协议中的问题中所说的功能的自定义协议,制作您的视图控制器或视图模型或您用作
UITableViewDataSource
确认该协议的任何其他东西,添加该协议类型的属性,分配实现对象到属性,并在选择按钮时调用该方法。
还有其他一些方法,但我认为这足以解决您的问题。希望这可以帮助!
推荐阅读
- reactjs - 焦点指示器被导航栏覆盖
- javascript - 如何更改 Google Chart 中的工具提示持续时间格式
- function - 使用 2 张工作表 [Google Sheets] 从员工记录中获取上一个日期并参考当前日期
- c# - 在 Windows 窗体中的 datagridview 中显示图标而不是 True/False
- node.js - Visual Studio Code 导入节点模块包失败
- tensorflow - TensorFlow 和 Keras 中的符号张量是什么?
- c# - 使用任务延迟后看不到输出
- scala - 为什么Scala Future在映射到迭代器时顺序运行
- java - 尝试根据列数据类型设置值时出现 NullPointerException
- java - 使用 Layout Inflater 方法为动态创建的 EditText 创建 TextView