refre sh контроллер зависает после быстрой смены панели вкладок - PullRequest
0 голосов
/ 09 апреля 2020

Я использую refre sh контроллер. Это хорошо работает, когда я нажимаю на элемент панели вкладок после полного завершения анимации refre sh. Но если я коснусь элемента панели очень быстро до завершения анимации, он будет завис Я пытаюсь использовать refreshControl.endRefreshing () в viewDidApper. Я также пытаюсь использовать refreshControl.endRefreshing () в viewWillDisappear. Эта ошибка все еще случается. Ниже приведены мой код и снимок.

снимок: https://imgur.com/a/UNvQbA8

демонстрационное видео: https://youtu.be/cZMurwiwfjI

let refreshControl: UIRefreshControl = UIRefreshControl()
@IBOutlet weak var myScrollView: UIScrollView!
@IBOutlet weak var noDataView: UIView!
@IBOutlet weak var tableView: UITableView!

override func viewDidLoad() {
    super.viewDidLoad()
    tableView.register(UINib.init(nibName: "MessageListCell", bundle: nil), forCellReuseIdentifier: "MessageListCell")
    tableView.delegate = self
    tableView.dataSource = self       
    refreshControl.addTarget(self, action: #selector(refresh), for: UIControl.Event.valueChanged)

    self.tableView.isHidden = true
    self.myScrollView.isHidden = false
}

Я поставил здесь refreshControl.endRefreshing (). Кажется, не работает.

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)
    self.refreshControl.endRefreshing()
    if !oneReload {
        getList()
        oneReload = true
    }
}

Я также пытаюсь поставить refreshControl.endRefreshing () перед добавлением подпредставления. Это все еще не сработало.

private func getList(){

   if self.viewData.count > 0{
     self.tableView.addSubview(self.refreshControl)
     self.tableView.isHidden = false
     self.myScrollView.isHidden = true         
     self.tableView.reloadData()
   }else{
     self.myScrollView.addSubview(self.refreshControl)
     self.myScrollView.isHidden = false
     self.tableView.isHidden = true
   }   
}

@objc func refresh(){
    refreshControl.endRefreshing()
    self.getList()
}

Я думаю, что это произойдет, потому что контроллер представления был заморожен перед изменением выбранного вида панели вкладок. В следующий раз я вернусь к представлению. Это шоу с анимацией замораживания. Могу ли я решить эту проблему? Пожалуйста помоги. Спасибо.

1 Ответ

0 голосов
/ 09 апреля 2020

Попробуйте добавить метод refre sh в основной поток.

@objc func refresh(){
    DispatchQueue.async.main {
        refreshControl.endRefreshing()
        self.getList()
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...