Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 获取UITableViewCell索引以响应位于tableview中的tableview中的按钮单击的正确方法?_Ios_Swift_Uitableview - Fatal编程技术网

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

Ios 获取UITableViewCell索引以响应位于tableview中的tableview中的按钮单击的正确方法?,ios,swift,uitableview,Ios,Swift,Uitableview,应用程序的屏幕截图: 我有一个“x”按钮来删除表格中的表格视图单元格。单击按钮时,我想删除单元格,因此我需要知道按钮单击的两个索引,如果是第一个表视图,则是行,然后在该表视图中是单击按钮的单元格的行。我只有寄信人 因此,为了更清楚一点,在屏幕截图中,如果有人单击福特嘉年华下的x,我需要为“subtableview”获取Indepath 0,为tableview获取1,这样我就知道从表数据源中删除此元素 我成功地做到了以下几点: var cell = sender.superview while

应用程序的屏幕截图:

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

因此,为了更清楚一点,在屏幕截图中,如果有人单击福特嘉年华下的x,我需要为“subtableview”获取Indepath 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)!
)
愚蠢的事情是我必须做两次,一次是在“sub”表视图中查找单元格的索引,然后再次在表视图中查找“subtableview”的索引

有更好的方法吗?有没有办法让按钮单击以启动didSelectRowAt并将sender对象添加到其中(因此我知道单击的是按钮而不是所选的单元格)


编辑我忘了提到第一个tableview在单击时打开和关闭,因此主tableview有两种不同的单元格类型,一种是关闭的(因此没有嵌套的tableview),然后在从该tableview中选择一行时,该单元格将替换为一个详细的单元格,其中包含另一个tableview,这就是为什么分段tableview不是解决方案的原因(据我所知,我是新来的)

一种方法是使用闭包。你用闭包设置你的单元格,然后调用它。大致如下:

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()
    }    
}

首先,嵌套需要什么!!!!单tableview或collectionview几乎可以实现所有功能。您需要重新思考!!!您应该只使用一个tableview dude。每个记录及其子记录不单独使用节和节方法视图的节和视图的用户数Posted sceenshot是单
UITableView
具有sections@mag_zbc我编辑了这篇文章,不清楚主表视图是由两种类型的单元格组成的,一种是标准的,另一种是详细的,它可以在选择一行时打开。因此,我认为分区表视图在这里不太有效(我显然可以利用“细节”的可见性)节,但我知道使用2种单元格类型更有效,如果我只需要关闭单元格就可以了,但单击X按钮后,我还需要发送一个api请求,其中包含我在数据源中保存的信息[indexPath]因此,我仍然需要以某种方式获得indexPath…您也可以在setupCell方法中传递该对象,我希望这是一个类。您的网络层是分开的,以便您可以在单元内创建端点的实例,还是我认为更好的方法是使用mvvm并基于您的数据源创建单元的view model和这些cell vie模型与作为参数的对象具有类似的闭包数据源是一个类yes,它将实际数据(另一个对象)作为属性保存并相应地处理tableView委托和构建单元格…你认为我应该将数据源传递到单元格并将其作为属性保存吗?!我对mvvm不熟悉,但听起来不对,但传递实际数据对象也不对…你是什么意思?