【问题标题】:cellForRowAt not called for TableView表视图不调用 cellForRowAt
【发布时间】:2020-09-26 22:08:14
【问题描述】:

我已阅读UITableView method cellForRowAtIndexPath not called 并尝试了各种约束组合......而且我确信我的问题无关紧要。

也许它与我的 TableLoader 类有关?我试图避免将 ViewController 设置为 UITableViewDataSource、UITableViewDelegate,这就是我创建第二个类的原因。有任何想法吗?谢谢

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var table: UITableView!

    override func viewDidLoad() {
        super.viewDidLoad()
        let loader = TableLoader(tableIn: table)
        loader.loadData()
    }


}

class TableLoader: NSObject, UITableViewDataSource, UITableViewDelegate {
    @IBOutlet weak var table: UITableView!

    init(tableIn: UITableView ) {
        self.table = tableIn
    }

    func loadData() {
        NSLog("INHE")
        table.delegate = self
        table.dataSource = self
    }

    let beverages = [
        ("Coke", "2.00", "12 fl oz", "ipsum lorem"),
        ("Sprite", "2.00", "12 fl oz", "ipsum lorem"),
        ("Powerade", "2.00", "20 fl oz", "ipsum lorem"),
        ("Blue Moon", "2.00", "12 fl oz", "ipsum lorem"),
        ("Budweiser", "2.00", "12 fl oz", "ipsum lorem"),
        ("Bud Light", "2.00", "12 fl oz", "ipsum lorem"),
        ("Corona", "2.00", "12 fl oz", "ipsum lorem"),
        ("Dos Equis", "2.00", "12 fl oz", "ipsum lorem"),
        ("Fat Tire", "2.00", "12 fl oz", "ipsum lorem"),
        ("Heineken", "2.00", "12 fl oz", "ipsum lorem"),
        ("Red Stripe", "2.00", "12 fl oz", "ipsum lorem"),
        ("Stella Artois", "2.00", "12 fl oz", "Stella Artois Premium Lager"),
        ("Yuengling", "2.00", "12 fl oz", "ipsum lorem")]

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        NSLog("\(beverages.count)")
        return beverages.count
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        NSLog("hi")
        let cell  = table.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as UITableViewCell
        //let beverage =
        cell.textLabel?.text = beverages[indexPath.row].0

        return cell
    }
}

【问题讨论】:

    标签: ios swift iphone uitableview ios13


    【解决方案1】:

    reloadData的调用调度到主队列可以解决问题,

    func loadData() {
      NSLog("INHE")
      table.delegate = self
      table.dataSource = self
    
      DispatchQueue.main.async {
        self.table.reloadData()
      }
    }
    
    

    【讨论】:

      【解决方案2】:

      class TableLoader: NSObject, UITableViewDataSource, UITableViewDelegate 问题似乎在这里。

      您应该创建UITableView 的子类。这是简单的解决方案。

      class TableLoader: UITableView, UITableViewDataSource, UITableViewDelegate {
      
      }
      

      然后 viewController 的 tableview 的引用将是

      @IBOutlet weak var table: TableLoader!
      

      也就不用多写几行了

      let loader = TableLoader(tableIn: table)
      loader.loadData()
      

      同时删除表加载器中的额外插座

      @IBOutlet weak var table: UITableView!
      

      因为一切都已经开始了

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-02-18
        • 1970-01-01
        相关资源
        最近更新 更多