获取 UITableViewCell 索引以响应位于 tableview 中的 tableview 中的按钮单击的正确方法?

Posted

技术标签:

【中文标题】获取 UITableViewCell 索引以响应位于 tableview 中的 tableview 中的按钮单击的正确方法?【英文标题】:Proper way to get indexes of a UITableViewCell in response to a button click which sits in a tableview within tableview? 【发布时间】:2018-07-11 13:22:33 【问题描述】:

应用截图:

我有一个“x”按钮来删除表格中的表格中的 TableViewCell。单击按钮时,我想删除单元格,因此我需要知道按钮单击的 2 个索引,如果是第一个表视图,则为该行,然后在该表视图中单击该按钮的单元格的行.我只有发件人。

所以为了更清楚一点,在屏幕截图中,如果有人点击福特嘉年华下的 x,我需要为“subtableview”获取 indexpath 0,为 tableview 获取 1,这样我就知道删除这个元素从表数据源。

我通过这样做成功地做到了:

var cell = sender.superview
while (cell != nil) && !((cell?.isKind(of: CustomCell.self))!) 
    cell = cell?.superview

    let tbl = cell?.superview as! UITableView
    let indexPath = tbl.indexPath(for: (cell as? UITableViewCell)!
)

愚蠢的是我必须做两次,一次在“子”表视图中找到单元格的索引,然后再次在表视图中找到“子表视图”的索引。

有没有更好的方法来做到这一点?有没有办法让 buttonClick 触发 didSelectRowAt 并将发送者对象添加到它(所以我知道点击了按钮而不是选择了单元格)?

编辑我忘了提到第一个表视图在点击时打开和关闭,所以主表视图有 2 种不同的单元格类型,一个是关闭的(所以没有嵌套的表视图),然后从中选择一行那个tableview,单元格被一个详细的单元格替换,里面有另一个tableview,这就是为什么分段的tableview不是一个解决方案(据我所知,我是新来的)

【问题讨论】:

首先,嵌套需要什么!!!大多数情况下,使用单个 tableview 或 collectionview 一切皆有可能。你需要重新考虑一下!!! 你应该只使用一个 tableview dude.not 单独为每条记录及其子记录用户部分的数量和部分方法的视图 发布的截图是一个教科书示例,其中包含单个 UITableView 和部分 @mag_zbc 我编辑了帖子,不清楚主表格视图由两种类型的单元格组成,一种是标准的,另一种是详细的,它打开了一行的选择。所以我认为分段的表格视图在这里效率不高(我显然可以玩“细节”部分的可见性,但我知道使用 2 种单元格类型更有效 【参考方案1】:

一种方法是使用闭包。你用一个闭包设置你的单元格,然后调用它。差不多是这样的:

class CellWithClosure: UITableViewCell 

    var button: UIButton = UIButton()

    var closureForButton: (Void) -> Void
    func setupCell(closureForButton: @escaping (Void) -> Void) 
        self.closureForButton = closureForButton
        button.addTarget(self, action: #selector(buttonAction), for: UIControlEvents.touchUpInside)
    

    @objc func buttonAction() 
        closureForButton()
        

【讨论】:

好的,如果我只需要关闭单元格就可以了,但是 X 按钮的 OnClick 我还需要发送一个 api 请求,其中包含我在数据源中保存的信息 [indexPath] 所以我仍然需要以某种方式获取 indexPath... 您也可以在 setupCell 方法中传递该对象,我希望这是一个类。您的网络层是分开的,因此您可以在单元格内创建端点事物的实例,还是比我认为更好的方法是使用 mvvm 并基于您的数据源来创建单元格的视图模型和这些单元格 vie 模型与您的对象有类似的闭包作为参数 数据源是一个类,是的,它将实际数据(这是另一个对象)作为属性保存并相应地处理 tableView 委托和构建单元格......你认为我应该将数据源传递给牢房并将其作为财产持有?我是 mvvm 的新手,但听起来不对,但也没有传入实际的数据对象……你是什么意思?

以上是关于获取 UITableViewCell 索引以响应位于 tableview 中的 tableview 中的按钮单击的正确方法?的主要内容,如果未能解决你的问题,请参考以下文章

无法获取 UITableViewCell 的索引路径

部分索引标题覆盖 UITableViewCell 视图

获取 json 数据后以编程方式设置 UITableViewCell 高度

如果通过附件视图添加到 UITableViewCell,UITextField 无法成为第一响应者

自定义 UITableViewCell 中的按钮在 iOS 7 中没有响应

RxSwift之订阅UITableViewCell里的按钮点击事件