如何在表格视图中以特定高度加载数据

时间:2018-06-26 14:14:13

标签: swift tableview

我的应用程序中有一个表格视图。在此,我正在加载我的数据。我希望如果第一个单元格中的数据加载的高度应为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
    }
}

这是当表格视图加载数据时我希望的第一个单元格的方式, enter image description here

1 个答案:

答案 0 :(得分:1)

您可以尝试

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)


    }


}