【问题标题】:RefreshControl doesn’t work in one of tabs with code used in similar way in other tabsRefreshControl 在其他选项卡中以类似方式使用的代码的选项卡之一中不起作用
【发布时间】:2019-11-23 16:16:09
【问题描述】:

应用程序选项卡使用刷新按钮来更新列表,效果很好。尝试使用“下拉刷新”但根本不起作用。

protocol StaffHistoryDelegate: class {
    func updateList()

}

class StaffHistoryController: UIViewController {

    @IBOutlet weak var tableView: UITableView!
    @IBOutlet weak var activityLoad: UIActivityIndicatorView!

    let myRefreshControl: UIRefreshControl = {
        let refreshControl = UIRefreshControl()
        refreshControl.attributedTitle = NSAttributedString(string: " ")
        refreshControl.addTarget(self, action: #selector(refresh(sender:)), for: .valueChanged)
        return refreshControl
    }()



 override func viewDidLoad() {
        super.viewDidLoad()

        prepareSearch()

        delegateStaffHystory =  self

        do { try self.frc.performFetch() }
        catch {}

        tableView.refreshControl = myRefreshControl
    }


    @IBAction func btnRefreshPressed(_ sender: UIBarButtonItem) {
        loadingShow(text: " ")
        delegateTabController?.loadStaffBill(completion: { (error) in
            DispatchQueue.main.async {
                loadingHide()
                if error != nil {
                    let alert = getAlert(title: error?.localizedDescription, message: nil)
                    self.present(alert, animated: true, completion: nil)
                }
            }
        })

    }

    @objc private func refresh(sender: UIRefreshControl) {
        updateList()
        tableView.reloadData()
        sender.endRefreshing()
    }

很遗憾,我不是编码员,我真的很难理解该做什么。 (我设法在其他 2 个选项卡上实现了“下拉刷新”,但这个选项卡的编码方式不同)。

【问题讨论】:

    标签: ios swift xcode uirefreshcontrol


    【解决方案1】:

    我假设“updateList()”是刷新数据的函数 -

    @objc private func refresh(sender: UIRefreshControl) {
        updateList()
        tableView.reloadData()
        sender.endRefreshing()
    }
    

    在函数完成计算之前检查 tableView 是否正在重新加载数据。 尝试在“updateList”函数中刷新数据时添加以下行。

    tableView.reloadData()
    

    如果“btnRefreshPressed”有效,试试这个

    @objc private func refresh(sender: UIRefreshControl) {
        self.btnRefreshPressed(UIBarButtonItem())
        sender.endRefreshing()
    }
    

    【讨论】:

    • 就像这样 codeextension StaffHistoryController: StaffHistoryDe​​legate { func updateList() { DispatchQueue.main.async { self.activityLoad.stopAnimating() self.tableView.reloadData() } } }code
    • 在updateList()中,只有一个ActivityIndi​​cator被停止,TableView被重新加载,但数据源保持不变,你是在获取还是更新数据?
    • 我不知道。我根本不是程序员,我只是想修复我们去世的前员工的代码((我认为 RefreshControl 应该和 Refresh Button 一样,但我想我错了。跨度>
    • 那么,如果它正在获取呢?
    • 您需要通过再次从数据源获取数据来更新您的数组。
    猜你喜欢
    • 2011-04-22
    • 2016-08-10
    • 1970-01-01
    • 2018-05-16
    • 2016-06-12
    • 2015-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多