RefreshControl 在其他选项卡中以类似方式使用的代码的选项卡之一中不起作用

Posted

技术标签:

【中文标题】RefreshControl 在其他选项卡中以类似方式使用的代码的选项卡之一中不起作用【英文标题】:RefreshControl doesn’t work in one of tabs with code used in similar way in other tabs 【发布时间】: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 个选项卡上实现了“下拉刷新”,但这个选项卡的编码方式不同)。

【问题讨论】:

【参考方案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 一样,但我想我错了。跨度> 那么,如果它正在获取呢? 您需要通过再次从数据源获取数据来更新您的数组。

以上是关于RefreshControl 在其他选项卡中以类似方式使用的代码的选项卡之一中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

当 indexedDB 条目在其他选项卡中更改时收到通知

选项卡内容布局显示在其他选项卡中

js跳转页面在新选项卡中打开

React Navigation 5 - 在导航到它之前从另一个选项卡中的另一个堆栈重置堆栈(类似于 popToTop())

在 js 代码中的其他选项卡中打开 url 时出错

Drupal 视图显示