swift - 如何在具有特定高度的表格视图中加载数据
问题描述
我的应用程序中有一个表格视图。在这我正在加载我的数据。我希望如果第一个单元格中的数据加载,其高度应为 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
}
}
解决方案
你可以试试
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)
}
}
推荐阅读
- next.js - NextJS、_app、SSG、getInitialProps 与 getStaticProps,我应该如何坚持 DRY?
- android - 带有 React 和 google auth 的 Ionic:idToken 在 android 中被截断
- sql - 使用 SQL 比较 2 个 url 主机名
- javascript - 在 Gatsby 中使用链接标签将样式注入 DOM
- python - Python Openpyxl:如何停止推理或覆盖单元格数据类型
- android - 如何使用设计略有不同的相同自定义视图?
- vba - VBA 将行数据移动到其相关工作表,但如果发现重复行,则跳过该行
- javascript - 获取参数并将其用作 Javascript 中的数组名称
- django - Django sum 对象过滤另一个模型
- javascript - 为什么我不能从 jsp 中的嵌入文件执行代码?