gpt4 book ai didi

ios - 尝试插入第 3 节,但更新后只有 3 节

转载 作者:行者123 更新时间:2023-11-30 11:53:20 28 4
gpt4 key购买 nike

我的 Tableview 有 N 个部分,其中 0,1 个部分是固定的。永远不会从 TableView 中删除。但从第2节开始到第N节,可以删除或插入。从第 2 部分到 N 部分 -> 每个部分也有行数。

我有从第二部分到 N 个部分的搜索功能。
这是完整的代码
1.这是计数 dic,其中包含每个部分的行数 ["section": "no of rows"]

self.countDic.updateValue(1, forKey: "0")
self.countDic.updateValue(0, forKey: "1")
for i in 0..<arra1.count {
self.countDic.updateValue(array.count, forKey: "\(i + 2)")//[index : arraylist.count]
}


2.这是返回部分和行的 Tableview 方法

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return countDic["\(section)"]!
}
func numberOfSections(in tableView: UITableView) -> Int {
return countDic.count
}


3.这是搜索和表格重新加载代码

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {

let newString = NSString(string: textField.text!).replacingCharacters(in: range, with: string)

if (newString.isEmpty) {
FilterStr = ""
} else {
FilterStr = newString
}

let namesBeginningWithLetterPredicate = NSPredicate(format: "(title1 CONTAINS[cd] $letter)")

let arr : [Today_ActivityModel] = (Today_Activity_Data as NSArray).filtered(using: namesBeginningWithLetterPredicate.withSubstitutionVariables(["letter": FilterStr])) as! [Today_ActivityModel]
if FilterStr == "" {
self.countDic.removeAll()

FilterData.removeAll()
//self.GetRecordsCityWiseFilter(ArrayList: self.Today_Activity_Data)
} else {
if arr.count >= 0 {

FilterData.removeAll()
//self.GetRecordsCityWiseFilter(ArrayList: arr )
} else {

self.countDic.removeAll()

FilterData.removeAll()
//self.GetRecordsCityWiseFilter(ArrayList: self.Today_Activity_Data)
}
}
DispatchQueue.main.async {
UIView.performWithoutAnimation {

let indexSet = IndexSet(integersIn: 2..<self.TblView.numberOfSections)
self.TblView.reloadSections(indexSet, with: .bottom)
}
}
return true
}

重新加载表格时,我尝试插入第 3 部分,但更新后只有 3 个部分
任何人都可以帮助我解决此问题吗?

最佳答案

有两种重新加载数据的方法。首先 - 调用重新加载数据。它将刷新整个 TableView 并从数据源请求加载数据。

第二:手动添加数据,触发数据源必要部分的加载。

所以基本上,如果您不想重新加载所有表格,或者想要有漂亮的动画,您需要首先添加新部分。

TblView.insertSections(IndexSet(integer: 1), with: .left)

请注意,您必须先更改数据,然后要求 TableView 查询新部分的数据。它将自动从数据源加载数据。

请在以下位置查看更多详细信息:https://developer.apple.com/documentation/uikit/uitableview/1614892-insertsections

编辑:我注意到您正在尝试在 UIView.animation 中重新加载表格。事实并非如此。当您告诉 TableView 添加/删除/更新其中的数据时,您可以指定所需的动画,或者它是.none

更新:代码示例:

tableView.beginUpdates()
let toUpdateIndexSet = IndexSet(integersIn: 1 ..< tableView.numberOfSections)
tableView.reloadSections(toUpdateIndexSet, with: .fade)

if tableView.numberOfSections < self.numberOfSections(in: tableView) {
let toAddIndexSet = IndexSet(integersIn: tableView.numberOfSections ..< self.numberOfSections(in: tableView))
tableView.insertSections(toAddIndexSet, with: .right)
}
tableView.endUpdates()

请注意,当您进行更改时, TableView 会尝试从数据源重新加载内容。但是,如果您在更新之前有 1 个部分,那么将第二个部分和几行添加到第一个部分,并尝试重新加载第一个部分,您将会崩溃(数据源有两个部分,但 TableView 此时只有一个部分) )。因此,在这种情况下,您需要进行批量更新 - beginUpdates,插入新行并添加新部分,endUpdates。在这种情况下,数据源只会在 endUpdates() 时触发。

关于ios - 尝试插入第 3 节,但更新后只有 3 节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48110122/

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