在 cellForRowAt 中不工作 UITableView 但 numberOfRowsInsection 在 Swift 中工作
Posted
技术标签:
【中文标题】在 cellForRowAt 中不工作 UITableView 但 numberOfRowsInsection 在 Swift 中工作【英文标题】:Not work UITableView in cellForRowAt But numberOfRowsInsection Work in Swift 【发布时间】:2018-11-19 09:01:11 【问题描述】:我写了一个函数来在UITableView
中添加一个单元格。
numberOfRowsInSection
有效,但 cellForRowAt
无效。
class ShopMenuViewCell: UITableViewCell
@IBOutlet weak var menuTableView: UITableView!
var menuPrice: MenuPrice!
override func awakeFromNib()
super.awakeFromNib()
extension ShopMenuViewCell
func setView()
self.menuTableView.delegate = self
self.menuTableView.dataSource = self
self.menuTableView.regCells(cells: ["ShopMenuInformationCell"])
DispatchQueue.main.async
self.menuTableView.reloadData()
extension ShopMenuViewCell : UITableViewDelegate, UITableViewDataSource
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
return 1
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
guard let cell = tableView.dequeueReusableCell(withIdentifier: "ShopMenuInformationCell", for: indexPath) as? ShopMenuInformationCell,
let menu = self.menuPrice,
let name = menu.name,
let price = menu.amt else return ShopMenuInformationCell()
return cell
在 ShpMenuInformationCell.swift 中
class ShopMenuInformationCell: UITableViewCell
@IBOutlet weak var containerView: UIView!
@IBOutlet weak var shopNameLabel: UILabel!
@IBOutlet weak var menuNameLabel: UILabel!
@IBOutlet weak var priceLabel: UILabel!
override func awakeFromNib()
super.awakeFromNib()
我看到了添加ViewController
的答案,但我不知道该怎么做,因为它不是故事板。 (.xib)
我认为是因为我在UITableViewCell
类中添加了UITableViewCell
。
你知道为什么吗?
【问题讨论】:
请添加regCells
功能码。
我不明白你的要求。
tableview 在另一个 tableview 单元格中。他们没有viewDidLoad。 @我
感谢您的反馈。
我认为您的单元格在屏幕上不可见,这就是 cellForRow 没有调用的原因您是否检查过将背景颜色设置为 ShopMenuViewCell?
【参考方案1】:
我遇到了大约 5 天的问题,找到了解决方案!
第一个参考网站:Joel 的回答 cellForRowAtIndexPath: not called
第二个参考网站:Paolo 的回答 Swift: UITableViewCell rowheight
当我添加另一种 TableCell 时,有问题的单元格的垂直尺寸很小。
所以我在重新加载数据之前增加了 Cell 的 RowHeight (frame.height) 的大小,它是固定的!
目前,cellforrowat 可以安全运行。您的回答对结果很有帮助。
【讨论】:
【参考方案2】:请尝试以下代码:
class ShopMenuViewCell: UITableViewCell
@IBOutlet weak var menuTableView: UITableView!
var menuPrice: MenuPrice!
override func awakeFromNib()
super.awakeFromNib()
fun setUpTable()
self.menuTableView.regCells(cells: ["ShopMenuInformationCell"])
self.menuTableView.delegate = self
self.menuTableView.dataSource = self
self.menuTableView.reloadData()
并从 ShopMenuViewCell 调用函数 setUpTable() 作为 cell.setUpTable()
【讨论】:
我以为这就是答案,但它不起作用。真的很伤心。 能否请您发送 regCells(cells: ["ShopMenuInformationCell"]) 函数。 @Enkha 我无法在代码中找到。它将位于 UITableViewExtension regCells(cells: ["ShopMenuInformationCell"]) @Enkha 在 cellForRow func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell if indexPath.row == 0 guard let cell = tableView.dequeueReusableCell(withIdentifier: “ShopMenuViewCell”)作为? ShopMenuViewCell else fatalError() cell.backgroudColor = .red return cell 我添加了代码。没有意义,因为 cellForRowAt 没有被执行。【参考方案3】:试试下面的代码:
解决方案 1
class ShopMenuViewCell: UITableViewCell
@IBOutlet weak var menuTableView: UITableView!
didSet
self.menuTableView.regCells(cells: ["ShopMenuInformationCell"])
self.menuTableView.delegate = self
self.menuTableView.dataSource = self
解决方案 2:请检查 Anand Verma 答案
【讨论】:
我会试试的。非常感谢。以上是关于在 cellForRowAt 中不工作 UITableView 但 numberOfRowsInsection 在 Swift 中工作的主要内容,如果未能解决你的问题,请参考以下文章
如何从 cellForRowAt 调用 draw(_ rect: CGRect) 在自定义 tableview 上绘图?
如何避免 tableView(_:cellForRowAt) 中的崩溃?