【问题标题】:Swift: Pull to refresh is too sensitiveSwift:拉动刷新太敏感了
【发布时间】:2018-06-02 05:12:02
【问题描述】:

我不太确定是否有人遇到过这个问题,但似乎我的 refreshControl 太敏感了。在我的实现中,我尝试进行拉动以刷新,并且代码甚至在我看到 refreshControl 旋转之前执行。

我做错了什么吗?

到目前为止我的实现。

//At initiation
lazy var refreshControl: UIRefreshControl = {
    let rc = UIRefreshControl()
    rc.tintColor = .white
    rc.addTarget(self, action: #selector(refreshControlDidRefresh), for: .valueChanged)
    return rc
}()

//At viewDidLoad(), I call a function setupViews()
func setupViews() {
    view.backgroundColor = .white
    view.addSubview(tableView)

    tableView.topAnchor.constraint(equalTo: view.topAnchor).isActive = true
    tableView.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor).isActive = true
    tableView.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor).isActive = true
    tableView.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor).isActive = true

    tableView.register(GossipsTableViewCell.self, forCellReuseIdentifier: "gossipCell")
    tableView.tableHeaderView = emptyTableViewHeader()
    tableView.refreshControl = refreshControl
}

@objc func refreshControlDidRefresh() {
    DispatchQueue.main.async {
        self.gossips.removeAll()
        self.tableView.reloadData()
    }

    getData()
}

func getData() {
    FirebaseClient.shared.fetchAllGossips { (results, error) in
        if let error = error {
            print(error.localizedDescription)
        } else if let results = results {
            self.gossips = results.sorted(by: { (gossip1, gossip2) -> Bool in
                guard
                    let gossip1Timestamp = gossip1.timestamp,
                    let gossip2Timestamp = gossip2.timestamp else {
                        return false
                }

                return gossip1Timestamp > gossip2Timestamp
            })

            self.filterGossips()

            DispatchQueue.main.async {
                if self.refreshControl.isRefreshing {
                    self.refreshControl.endRefreshing()
                }

                if JustHUD.shared.isActive {
                    JustHUD.shared.hide()
                }

                var indexPaths = [IndexPath]()
                for (index, _) in self.gossips.enumerated() {
                    let indexPath = IndexPath(row: index, section: 0)
                    indexPaths.append(indexPath)
                }

                self.tableView.insertRows(at: indexPaths, with: .automatic)
                self.segmentedControl.isUserInteractionEnabled = true
            }
        }
    }
}

您可以在此处看到结果。当我尝试下拉时,甚至在我开始看到正在绘制的 refreshControl 之前就执行了刷新。有什么我遗漏的吗?

【问题讨论】:

  • 适当的向下页面调用pull刷新

标签: ios swift uitableview uirefreshcontrol


【解决方案1】:

您所做的一切都是正确的,这是拉动刷新控件的默认行为。如果您希望它采取不同的行动,请尝试第 3 部分解决方案或删除控件并在 scrollViewDidScroll 中实现您自己的逻辑。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多