将单元格移动到表格视图中的新部分

Posted

技术标签:

【中文标题】将单元格移动到表格视图中的新部分【英文标题】:Moving cells to new sections in a tableview 【发布时间】:2020-05-08 14:31:00 【问题描述】:

在用户选择按钮后,如何将单元格从表格视图中的第一部分移动到第二部分?

这建立了我的表格视图。

    @IBOutlet weak var goalTableView: UITableView!

    let sections: [String] = ["Today:", "History:"]
    var goals: [[String]] = [["Goal 1", "Goal 2", "Goal 3"], [""]]

    override func viewDidLoad() 
        super.viewDidLoad()

在我的 viewdidload 中,我会添加一个从按钮到我的视图控制器的连接,但我是否必须在这里开发一个函数来将选定的单元格移动到新部分?

        let headerView = UIView()
        goalTableView.tableHeaderView = headerView
        headerView.frame = CGRect(x: 0, y: 0, width:   view.frame.width, height: 5)
    


extension ViewController: UITableViewDataSource, UITableViewDelegate 

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
        return goals[section].count
    

    func tableView(_ tableView: UITableView, cellForRowAt   indexPath: IndexPath) -> UITableViewCell 
        let cell = tableView.dequeueReusableCell(withIdentifier: "TodayGoalViewCell_1", for: indexPath) as? GoalTableViewCell
        cell?.goalLabel.text = goals[indexPath.section][indexPath.row]
        cell?.cellDelegate = self
        cell?.index = indexPath
        return cell!
    

    func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? 
        return sections[section]
    

    func numberOfSections(in tableView: UITableView) -> Int 
        return goals.count
    


extension ViewController: GoalTableView 
    func selectGoalButton(index: Int) 
    

【问题讨论】:

如果您正在选择要移动的单元格,那么为什么不使用 didSelectRowAt 呢?我不明白你想用一个单独的按钮来实现什么? 一旦用户单击单元格中的按钮,我希望该单元格自动转到第二部分,因为该按钮也已经连接到进度条。所以用户只需要做出一个选择。如果我使用 didSelectRowAt 会影响用户选择单元格的次数吗? 除非您的单元格中正在进行其他 UI 事件,否则我看不出您为什么不能使用 didSelectRowAt。我会尽快为您发布解决方案。 【参考方案1】:
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) 

    // Only move cell from the 1st section
    if indexPath.section == 0 

        // Append the selected element to the second array
        goals[1].append(goals[0][indexPath.row])

        // Remove the selected element from the first array
        goals[0].remove(at: indexPath.row)

        tableView.reloadData()
    

【讨论】:

以上是关于将单元格移动到表格视图中的新部分的主要内容,如果未能解决你的问题,请参考以下文章

将表格视图单元格从一个部分移动到另一个部分但收到错误

如何使用自定义按钮重新排序表格视图单元格,但不使用 ios 中的移动编辑图标

如何将表格视图单元格从一个表格视图移动到新的表格视图

将数据从集合视图单元格移动到新的集合视图单元格

将集合视图中的单元格移动到另一部分的最后一个单元格之外不起作用

在表格视图单元格之间移动的文本