首页 > 解决方案 > 如何在具有特定高度的表格视图中加载数据

问题描述

我的应用程序中有一个表格视图。在这我正在加载我的数据。我希望如果第一个单元格中的数据加载,其高度应为 120,剩余单元格的高度应为 50。我在 didSelect 委托中也有条件,如果用户选择单元格,当前单元格高度增加到 120,剩余单元格高度为 50 . 我怎样才能显示我的第一个单元格高度 120 并剩余 50 。这是我在表格视图加载数据时的代码。

 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return dishNameArray.count
}

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    if (flag == true && indexPath.row == indexValue) {
        return 120
    }
    else {

        return 40
    }
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = cartTableView.dequeueReusableCell(withIdentifier: "cartCell", for: indexPath) as! CartTVC

    cell.dishNameLbl.text = dishNameArray[indexPath.row]
    cell.eachPriceLbl.text = priceArray[indexPath.row]
    cell.quantityLbl.text = "1"
    cell.qtyLbl.text = "1"
    cell.totalPriceLbl.text = priceArray[indexPath.row]
    cell.deleteBtn.tag = indexPath.row
    cell.deleteBtn.addTarget(self, action: #selector(crossBtnTapped), for: .touchUpInside)
    cell.selectionStyle = .none

    return cell
}

@objc func crossBtnTapped(sender: UIButton) {
    dishNameArray.remove(at: sender.tag)

    let indexPath = IndexPath.init(row: sender.tag, section: 0)
    let cell = cartTableView.cellForRow(at: indexPath) as! CartTVC
    print(cell)
    cartTableView.reloadData()
    print(sender.tag)
    print("II:\(dishNameArray.count)")
}

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    print("Yes")
    indexValue = indexPath.row
    if flag && indexValue == indexPath.row{
        // rfpNumberTableView.beginUpdates()
        let cell = self.cartTableView.cellForRow(at: indexPath) as! CartTVC
        cell.bgView.backgroundColor = #colorLiteral(red: 0.8039215803, green: 0.8039215803, blue: 0.8039215803, alpha: 1)

        self.cartTableView.reloadRows(at: [indexPath], with: UITableViewRowAnimation.none)
        // cartTableView.endUpdates()
        flag = false
    }
    else{

        let cell = self.cartTableView.cellForRow(at: indexPath) as! CartTVC
        cell.bgView.backgroundColor = #colorLiteral(red: 0.9529120326, green: 0.3879342079, blue: 0.09117665142, alpha: 1)
        // rfpNumberTableView.beginUpdates()
        self.cartTableView.reloadRows(at: [indexPath], with: UITableViewRowAnimation.none)
        // cartTableView.endUpdates()
        flag = true
    }
}

当表格视图加载数据时,这就是我想要我的第一个单元格的方式, 在此处输入图像描述

标签: swifttableview

解决方案


你可以试试

var indexValue = 0

//

  func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {

   if indexPath.row == indexValue {

      return 120

   else {

        return 50
   } 
}

//

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    let cell = cartTableView.dequeueReusableCell(withIdentifier: "cartCell", for: indexPath) as! CartTVC

    if indexPath.row == indexValue {
          cell.bgView.backgroundColor = #colorLiteral(red: 0.8039215803, green: 0.8039215803, blue: 0.8039215803, alpha: 1)

    }
    else {
          cell.bgView.backgroundColor = #colorLiteral(red: 0.9529120326, green: 0.3879342079, blue: 0.09117665142, alpha: 1)

    }


    cell.dishNameLbl.text = dishNameArray[indexPath.row]
    cell.eachPriceLbl.text = priceArray[indexPath.row]
    cell.quantityLbl.text = "1"
    cell.qtyLbl.text = "1"
    cell.totalPriceLbl.text = priceArray[indexPath.row]
    cell.deleteBtn.tag = indexPath.row
    cell.deleteBtn.addTarget(self, action: #selector(crossBtnTapped), for: .touchUpInside)
    cell.selectionStyle = .none

    return cell
}

//

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    print("Yes")


    if indexValue != indexPath.row {

         let oldIndex = IndexPath(row: indexValue , section: 0) 
         indexValue = indexPath.row
         self.cartTableView.reloadRows(at: [indexPath,oldIndex], with: UITableViewRowAnimation.none)


    }


}

推荐阅读