在的TabBar的抽头更新当前的UIViewController UI

问题描述 投票:0回答:1

我想,当用户点击某个项目的TabBar显示一个活动的指标。我的问题,我想,就在于该UI主线程被冻结。

当用户点击的TabBar我准备大约需要六秒大数据列表。我得到的活动以显示无处不在,但是当他们挖掘的TabBar。

它好像指示灯“运行”,因为当segued的UITableViewController所示,它是表示显示器。但是,这是为时已晚,调度似乎并不无论做任何事情。

func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool {
    if let visibleViewCtrl = UIApplication.shared.keyWindow?.visibleViewController {
        // do whatever you want with your `visibleViewCtrl`
        print (String.init(describing: visibleViewCtrl.classForCoder))
        DispatchQueue.main.async{

            let aprogressView = ProgressView(Message: "Filtering...",
                                        Theme:.Dark,
                                        IsModal:true);

            visibleViewCtrl.view.addSubview(aprogressView)
            aprogressView.show()
        }
    }
    return true
}

OK,所以问题是,它带来的是的tableview控制器,它试图获得部分行几乎immediatetly,然后首先fetchrequest阻断一切,因为它是在主线程上。

swift uitabbarcontroller uitabbar
1个回答
0
投票

解决了:

增加了一个布尔值:

 var loadData = false

 override func viewDidAppear(_ animated: Bool) {
        loadData = true
        self.tableView.reloadData()
 }

然后代表的发言:

func sectionIndexTitles(for tableView: UITableView) -> [String]? {
    if loadData == false {
        return nil
    }
    return  searchFetchedResultsController.sectionIndexTitles

}



func numberOfSections(in tableView: UITableView) -> Int {
    if loadData == false {
        return 0
    }

现在,它会立即转换到新的控制器,因此我现在可以从viewWillAppear中显示的反馈:

appDelegate.progressView = ProgressView(Message: "Filtering Brands", Theme:.Dark, IsModal:true);
    appDelegate.progressView!.show()

这不会编程显示工作

    self.navigationController?.pushViewController(vc, animated: false)
© www.soinside.com 2019 - 2024. All rights reserved.