无法在cellForRowAt中使用UITableView但在Swift中使用numberOfRowsInsection

时间:2018-11-19 09:01:12

标签: ios swift uitableview

我编写了一个在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

你知道为什么吗?

3 个答案:

答案 0 :(得分:1)

请尝试以下代码:

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()

答案 1 :(得分:1)

我有大约5天的问题,找到了解决方案!

第一个参考站点:乔尔的答案cellForRowAtIndexPath: not called

第二参考站点:Paolo的答案 Swift: UITableViewCell rowheight

当我添加另一种TableCell时,所讨论的单元格的垂直尺寸很小。

所以我在重新加载数据之前增加了单元格的RowHeight(frame.height)的大小,并且它是固定的!

当前,cellforrowat安全运行。您的答案对结果很有帮助。

答案 2 :(得分:0)

尝试以下代码:

解决方案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答案