为啥重新加载 tableView 不能快速工作?

Posted

技术标签:

【中文标题】为啥重新加载 tableView 不能快速工作?【英文标题】:Why does not reload tableView work swift?为什么重新加载 tableView 不能快速工作? 【发布时间】:2020-03-09 11:09:53 【问题描述】:

当我从delegate(或viewDidLoad)调用reloadData() 时,不会触发函数tableView(...cellForRowAtIndexPath:..)。当我从 tapButton 调用 reloadData() 时,一切正常。为什么?

override func viewDidLoad() 
        super.viewDidLoad()
        tableView.delegate = self
        tableView.dataSource = self
        exerciseList = ExerciseListTableViewController.ExerciseList
        trainingList = TrainingListTableViewController.trainingList
        if UserDefaults.standard.integer(forKey: "FactoryEx") != 0 
            identifierFactory = UserDefaults.standard.integer(forKey: "FactoryEx")
        
        tableView.rowHeight = 60
        tableView.allowsSelection = false
        //tableView.tableFooterView = UIView()
    

    func reload(choose: Bool)
        exerciseTableChoose = choose
        tableView.reloadData()
    
    @IBAction func reload(_ sender: UIButton) 
        exerciseList.append(Exercise())
        tableView.reloadData()
    
protocol FirstTable 
func reload(choose: Bool)
func addCell(name: String, parametr: [Bool])

【问题讨论】:

可能有多种原因,计数为零,部分中的项目数返回 0 你实现了'numberOfRowsForSection'数据源方法吗? 添加与UITableView 创建相关的代码以及为TableView 设置数据的位置并重新加载部分。添加代码以获得更好的解释 【参考方案1】:

viewDidAppear() 中添加 tableView.reloadData()。因为 viewDidLoad() 只在 Viewcontroller 创建时调用。

【讨论】:

【参考方案2】:

这样做。

extension SCSelectSubTypeVC : UITableViewDelegate, UITableViewDataSource

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
    return datasource.count


func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 
    let cell:SCSelectSubTypeCell = self.tblView.dequeueReusableCell(withIdentifier: "SCSelectSubTypeCell") as! SCSelectSubTypeCell
    cell.confirgureCell(datasource[indexPath.row])
    return cell




func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat 
    return 60

如果你想在每次 viewController 出现时重新加载表格,请在 viewWillAppear() 函数中调用 self.tblView.reloadData()。

【讨论】:

【参考方案3】:

别忘了,UI 只能在主线程中更新!

【讨论】:

以上是关于为啥重新加载 tableView 不能快速工作?的主要内容,如果未能解决你的问题,请参考以下文章

reloadData() 不能快速工作

用内容重新加载我的 tableView 后,它仍然显示为灰色,直到我点击它..为啥?

iOS 为啥我的应用程序在重新启动之前不会将数据加载到 tableview 中?

快速单击其中一个 tableview 单元格内的按钮后重新加载 tableview

使用 Xib 在 Tableview Header 中快速重新加载 CollectionView

多次重新加载 TableView Swift