gpt4 book ai didi

ios - 在按钮单击 tableview swift 上更新 JSON 数据源

转载 作者:行者123 更新时间:2023-11-28 13:28:10 25 4
gpt4 key购买 nike

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

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

Error: Attempt to insert row 3 into section 0, but there are only 0 rows in section 0 after the update

最佳答案

我已经看到您的项目,需要进行一些更改,以便从底部部分添加所选项目以添加到顶部部分。

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

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

然后如下更改委托(delegate)调用。

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

关于ios - 在按钮单击 tableview swift 上更新 JSON 数据源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57968960/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com