在 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 中工作的主要内容,如果未能解决你的问题,请参考以下文章

简化 TableView 中的 cellForRowAt

添加表格视图单元格在 iOS 中不起作用?

如何从 cellForRowAt 调用 draw(_ rect: CGRect) 在自定义 tableview 上绘图?

如何避免 tableView(_:cellForRowAt) 中的崩溃?

在 `cellForRowAt` 中激活 NSLayoutConstraint 直到滚动后才会呈现

无法将“Int”类型的值分配给“String”类型?在 (cellForRowAt) 中使用 Tableview