如何在Swift 4中不重新加载表格的情况下添加新单元格和新标题?

时间:2018-08-31 06:33:45

标签: ios swift uitableview

我的查询中看到了很多答案,但是我的问题没有解决。我在这里打开一个新问题。

我有一个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(),但没有任何效果,因为每次我单击“加载更多”按钮时,都会收到新的标题。在这些标题中将有新的单元格。有人可以帮忙吗?

这不是重复的,因为该解决方案是在节中插入新行,但是在这里,我必须先创建新节,然后在其中添加新行。我不想触摸旧的部分。

0 个答案:

没有答案