如何在swift 4中正确地重新加载tableview控制器单元格中的tableview中的数据?

时间:2017-12-19 09:08:48

标签: ios uitableview cell swift4

我在一个tableview控制器(名为A)单元格中有一个表视图(名为B),我在tableView中有一个按钮一个单元格(名为add),在该单元格中我有tableview B和tableview B有一个按钮(名为Delete)和每个单元格的文本字段,所以我想当用户推送添加按钮表视图B重新加载并有一个新行时,当用户按下删除按钮表视图B重新加载并删除该行以便更好地理解我有一个视频,你可以看到这里的链接 https://ufile.io/5x6y1

在此视频中,您可以看到会发生什么以及我想做什么

这里是主表视图类中删除和添加按钮的代码(记住表视图中的添加按钮一个单元格(主表视图单元格和删除按钮位于表格视图B单元格中) (在主表视图(表格视图A)单元格内的表格视图B中的每个单元格中)

    var certificates = [String]()
    if self.pf.Licences.count != 0 {
               for i in 0...self.pf.Licences.count - 1 {
                    print(self.pf.Licences[i].title!)
                            self.certificates.append(self.pf.Licences[i].title!)
                        }
                    }
                    self.tableView.reloadData()
                }

 @IBAction func deleteCer(_ sender: UIButton) {

    print("delete")
    let buttonRow = sender.tag
    certificates.remove(at: buttonRow)
    DispatchQueue.main.async {
        self.tableView.reloadRows(at: [IndexPath.init(row: 0, section: 6)], with: .right)
    }
}

@IBAction func addingCertificate(_ sender: UIButton) {

    print("add")
    if certificates.count != 0 {
        if certificates[certificates.count - 1] != "" {
            certificates.append("")
            DispatchQueue.main.async {
                self.tableView.reloadRows(at: [IndexPath.init(row: 0, section: 6)], with: .bottom)
                }
            }
        }
        else {
           print(certificates)
           certificates.append("")
            print(certificates)

            DispatchQueue.main.async {
                self.tableView.reloadRows(at: [IndexPath.init(row: 0, section: 6)], with: .bottom)

        }
    }
}

1 个答案:

答案 0 :(得分:0)

为了使您的添加和删除工作,您需要在https://developer.apple.com/documentation/uikit/uitableview的“插入,删除和移动行和节”部分下的UITableView上查看如何执行这些操作。

您确实需要使用insertRows(at:with:)deleteRows(at:with:),同时确保更新数据源。

如果您的UITableView B有某种控制器,您可能应该向其发送插入和删除消息,而不是父UITableView A.

另一方面,您使用certificates[certificates.count - 1]的地方可以使用certificates.last