TableView出现在数据加载之前

时间:2018-08-21 13:21:48

标签: ios swift uitableview

当我从DispatchQueue.main.async{}调用viewDidLoad()分配表视图委托和数据源时,表视图将在加载任何数据之前出现,几秒钟后数据将出现。如果我将委托和数据源分配给闭包之外,则会有一些滞后,但是会出现tableview并加载所有数据。由于UIKit不是线程安全的,因此我必须在闭包中分配tableview的属性。有没有办法在表格视图出现之前加载我的数据,还是在填充单元格的时候只使用活动指示器1/2秒?

override func viewDidLoad() {
    super.viewDidLoad()
    if let normalDays = Bundle.main.loadNibNamed("NormalClasses", owner: self, options: nil)?.first as? NormalClassesView, let specialDays = Bundle.main.loadNibNamed("SpecialClasses", owner: self, options: nil)?.first as? SpecialClassesView {
        //I removed some code here for sizing the views since it didn't pertain to the question
        DispatchQueue.main.async {
            self.tableViews.forEach{
                if let tableView = $0 {
                    let nib = UINib(nibName: "BasicClassInfoCell", bundle: nil)
                    tableView.register(nib, forCellReuseIdentifier: "periodCell")
                    tableView.tableFooterView = UIView()
                    tableView.separatorStyle = .none
                    tableView.isUserInteractionEnabled = false
                    tableView.delegate = self
                    tableView.dataSource = self
                }
            }
        }
    }
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    if let cell = tableView.dequeueReusableCell(withIdentifier: "periodCell", for: indexPath) as? BasicClassTableViewCell {
        cell.backgroundColorView.backgroundColor = UIColor.blue
        return cell
    }
    return UITableViewCell()
}

1 个答案:

答案 0 :(得分:0)

仅隐藏tableView直到加载完成,然后将其设置为false