我的查询中看到了很多答案,但是我的问题没有解决。我在这里打开一个新问题。
我有一个API,该API返回数据。我在标题和单元格中显示它。而且,如果API返回1 for has_more key
,也将有一个更多加载按钮。因此,当我点击“加载更多”按钮时,我再次调用该API,以便可以获取剩余的数据,但是由于重新加载了表格视图,它也刷新了整个表格视图。
因此,现在,我要添加新的单元格和标头而不重新加载现有的表格视图,以便不影响tableView中的先前标头和单元格。
这是API函数:
func getOverallWinners(has: Int)
{
let params = ["api_token": Constants.USER_INFO["api_token"].rawValue,"has_more": has]
ServiceHelper.sharedInstance.sendRequest(path: "contest-overall-winning", params: params, showSpinner: true)
{ (response, error) in
if error != nil
{
print("Error: \(error.debugDescription)")
}
else
{
self.winnerArr = response["result"].arrayObject as? Array<Dictionary<String,Any>>
self.overallL.text = "$\(String(describing: response["overall"].rawString()!))"
self.winningTbl.beginUpdates()
let indexPath:IndexPath = IndexPath(row:((self.winnerArr?.count)! - 1), section:0)
self.winningTbl.insertRows(at: [indexPath], with: .left)
self.winningTbl.endUpdates()
self.winningTbl.scrollToRow(at: indexPath, at: .bottom, animated: true)
let loadMore = response["has_more"].rawValue as? Int
if loadMore == 0
{
self.constantHeight4LoadMore.constant = 0
}
else
{
self.constantHeight4LoadMore.constant = 40
}
}
}
}
这是tableView委托:
func numberOfSections(in tableView: UITableView) -> Int {
return (winnerArr?.count)!
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
let rowArray = winnerArr![section]["response"] as? Array<Dictionary<String,Any>>
return rowArray!.count
}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return 60
}
func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
return 60
}
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView?
{
self.prizeArr.removeAll()
let header = tableView.dequeueReusableHeaderFooterView(withIdentifier: cellReuseIdentifier) as! OverallHeaderCell
let resArr = self.winnerArr![section]["response"]! as? Array<Dictionary<String,Any>>
for prize in resArr!
{
let doubleStr = prize["prize"] as? NSString
self.prizeArr.append((doubleStr?.doubleValue)!)
}
let sumedStr = prizeArr.reduce(0, +)
header.textL[0].text = winnerArr![section]["name"] as? String
header.textL[1].text = "$\(sumedStr)"
header.textL[3].text = "\(String(describing: resArr!.count))"
return header
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "owCell", for: indexPath) as! OWCell
let response = winnerArr![indexPath.section]["response"] as? Array<Dictionary<String,Any>>
cell.collectionL[0].text = (response![indexPath.row]["name"] as! String)
cell.collectionL[1].text = "$\(String(describing:response![indexPath.row]["prize"]!))"
cell.collectionL[2].text = "WIN"
cell.selectionStyle = .none
return cell
}
我尝试了上面的beginUpdates()
,但没有任何效果,因为每次我单击“加载更多”按钮时,都会收到新的标题。在这些标题中将有新的单元格。有人可以帮忙吗?
这不是重复的,因为该解决方案是在节中插入新行,但是在这里,我必须先创建新节,然后在其中添加新行。我不想触摸旧的部分。