获取 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 中的按钮单击的正确方法?的主要内容,如果未能解决你的问题,请参考以下文章
获取 json 数据后以编程方式设置 UITableViewCell 高度
如果通过附件视图添加到 UITableViewCell,UITextField 无法成为第一响应者