Swift: потяните, чтобы обновить слишком чувствительный - PullRequest
0 голосов
/ 02 июня 2018

Я не уверен, сталкивался ли кто-нибудь с этой проблемой, но кажется, что мой 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.Я что-то упускаю?

enter image description here

1 Ответ

0 голосов
/ 02 июня 2018

Вы все делаете правильно, это поведение по умолчанию для управления обновлением.Если вы хотите, чтобы он действовал по-другому, попробуйте решение из 3-х частей или удалите элемент управления и реализуйте свою собственную логику в scrollViewDidScroll.

...