在按钮单击TableView Swift上更新JSON数据源

时间:2019-09-17 07:03:32

标签: ios json swift uitableview

在更新数据源本地JSON文件时感到困惑。我有添加按钮在表视图中显示的列表。我需要对按钮事件执行操作,以在部分顶部添加特定行。我正在使用代表。数据列表基于分段。

  

链接:   https://drive.google.com/file/d/1cufp7hHNEVe4zZ7TiSCjFvFLm7EAWuXo/view?usp=sharing

extension DelegateViewController: DictionaryTableDelegate{
    func didAddnewRow(_ tag: Int) {
        print("Add Button with a tag: \(tag)")
        AppList?.selectedValue?.append("Welcome")


        let indexPath = IndexPath(row: AppData?.sectionList?.count ?? 0 - 1, section: 0)
        tableView.beginUpdates()
        tableView.insertRows(at: [indexPath], with: .automatic)
        tableView.endUpdates()
        tableView.reloadData()
    }
  

错误:   尝试将第3行插入第0部分,但更新后第0部分只有0行

1 个答案:

答案 0 :(得分:1)

我已经看到您的项目,需要进行一些更改,如下所述,以便从底部添加选定的项目,然后在顶部添加

首先,如下更新您的DictionaryTableDelegate方法:

protocol DictionaryTableDelegate {
    func didAddnewRow(_ sender: UIButton)
}

然后按如下所示更改委托调用。

@IBAction func addClicked(_ sender: UIButton) {
    delegate?.didAddnewRow(sender)
}

itemslet更改为var

struct SectionList : Codable {
    let title : String?
    var items : [Item]?
}

与此处相同,将sectionListlet更改为var

struct ListData : Codable {
    var sectionList : [SectionList]?    
}

按以下更新didAddnewRow的代码将解决您的问题:

extension DelegateViewController: DictionaryTableDelegate{

    func didAddnewRow(_ sender: UIButton) {

        if let cell = sender.superview?.superview as? DictionaryTableViewCell,
            let indexPath = self.tableView.indexPath(for: cell)
        {
            if let selectedItem = AppData?.sectionList?[indexPath.section].items?[indexPath.row] {

                let insertIndexPath = IndexPath(item: AppData?.sectionList?[0].items?.count ?? 0, section: 0)

                AppData?.sectionList?[0].items?.append(selectedItem)

                tableView.beginUpdates()
                tableView.insertRows(at: [insertIndexPath], with: .automatic)
                tableView.endUpdates()
            }
        }
    }
}

如果要从底部删除选定的行,请更新以下代码

func didAddnewRow(_ sender: UIButton) {

    if let cell = sender.superview?.superview as? DictionaryTableViewCell,
        let indexPath = self.tableView.indexPath(for: cell),
        indexPath.section != 0
    {
        if let selectedItem = AppData?.sectionList?[indexPath.section].items?[indexPath.row] {

            let insertIndexPath = IndexPath(item: AppData?.sectionList?[0].items?.count ?? 0, section: 0)

            AppData?.sectionList?[0].items?.append(selectedItem)
            AppData?.sectionList?[indexPath.section].items?.remove(at: indexPath.row)

            tableView.beginUpdates()
            tableView.insertRows(at: [insertIndexPath], with: .automatic)
            tableView.deleteRows(at: [indexPath], with: .automatic)
            tableView.endUpdates()
        }
    }
}