删除项目的正确方法 uitableview swift 4

问题描述 投票:0回答:1

我有一个有3个部分(3个单元格)的UitableView,在第1部分,我有一个项目列表,用户可以使用按钮删除,所有的删除过程是好的,但是当我删除一个项目时,Uitableview会从顶部到底部(类似于重新加载视图),我想让这个

当用户删除一个项目时,只能从位置上删除,这是我的代码。

    func numberOfSections(in tableView: UITableView) -> Int {
        return 3
    }

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        var value: Int = 0
        if(section == 0){
            value = 1
        }else if(section == 1){
            value = items.count //20
        }else if(section == 2){
            value = 1
        }
        return value
    }

    @objc func delete_item(sender: UIButton){
        let point = sender.convert(CGPoint.zero, to: tv_items)
        guard let indexPath = tv_items.indexPathForRow(at: point) else{
            return
        }
        tv_items.beginUpdates()
        self.items.remove(at: indexPath.row)
        tv_items.deleteRows(at: [indexPath], with: .fade)
        tv_items.endUpdates()
    }


    cell.btn_delete.tag = indexPath.row
    cell.btn_delete.addTarget(self, action: #selector(delete_item), for: .touchUpInside)

先谢谢你

ios swift xcode swift4
1个回答
0
投票

使用下面的方法,我想它会解决你的问题:-。

override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { 
return 50.0 // height of the row (Eg. 50.0)
}


0
投票

如果你使用的是 estimatedHeightForRowAt,禁用此功能并使用 heightForRowAt 函数。

或者,在 endUpdates():

tv_items.scrollToRow(at: indexPath, at: .top, animated: false)

如果你有固定的行高,可以使用。

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    return 80 // or any constant height
}

如果你需要根据内容来改变高度,请告诉我内容是什么,这样我就可以帮助你。

© www.soinside.com 2019 - 2024. All rights reserved.