Потяните, чтобы обновить вид, не закрывая при использовании, чтобы вызвать переход - PullRequest
0 голосов
/ 23 сентября 2018

Я хочу использовать действие пользовательского интерфейса для обновления, чтобы вызвать переход к модальному виду.Действие работает отлично, вызывая модальный переход, как и ожидалось.Но когда я отклоняю модальный режим, представление управления обновлением все еще видно.

Я правильно вызываю refreshControl.endRefreshing() перед переходом, но проблема заключается в том, что пользовательский интерфейс не успевает завершить анимацию, которая закрывает представление управления обновлением до запуска перехода, поэтому он получаетсосать на полпути.

Если я помещу небольшую задержку (0,4 с) перед запуском перехода, этот вид помогает, поскольку он позволяет завершить анимацию, но это похоже на взлом.Кроме того, если пользователь действительно медленно нажимает на просмотр таблицы и освобождает раскрытие позже, чем через 0,4 секунды, возникает та же проблема.

Как я могу гарантировать, что элемент управления обновлением не будет виден, когда яотклонить модальный вид?У меня есть идеи (но я не могу найти способ их реализовать), включающие: 1) обеспечение того, чтобы анимация, которая отклоняет элемент управления обновлением, успела завершиться до запуска перехода.2) отклонить представление управления обновлением родительского представления, когда я отклоняю модальное.

Я не могу заставить работать все вышеперечисленное.С 1) задержка работает (иногда), но ощущается как взлом.При 2) tableView.reloadData () перезагружает только табличное представление, а не все представление, поэтому элемент управления обновлением остается.

Любая помощь будет принята с благодарностью.

Вот код, который реализует элемент управления обновлением.

lazy var refreshControl: UIRefreshControl = {

    let refreshControl = UIRefreshControl()

    refreshControl.addTarget(self, action: #selector(pullToAddCard(_:)), for: .valueChanged)

    return refreshControl
}()

А вот код, который запускается элементом управления обновлением

 @objc func pullToAddCard(_ refreshControl: UIRefreshControl) {

    refreshControl.endRefreshing()

    delay(0.4, closure: {
       self.performSegue(withIdentifier: "segueFromPlaylistDetailToNewCard", sender: self)

    })

}

А вот кодснимок экрана того, как выглядит родительское представление, когда я возвращаюсь к нему (отклоняя модальное представление.) "застрявшее" представление управления обновлением видно в верхней части.

enter image description here

Ответы [ 2 ]

0 голосов
/ 23 сентября 2018

Хорошо, я нашел решение.Ответ @Ashley Mills дал мне идею.В viewWillAppear я звоню refreshControl.beginRefreshing(), а затем сразу же звоню refreshControl.endRefreshing(), и это работает!

По какой-то причине простого вызова refreshControl.endRefreshing() было недостаточно.

0 голосов
/ 23 сентября 2018

Просто добавьте

refreshControl?.endRefreshing()

к вашему viewWillAppear методу


Я только что попробовал следующее, используя раскадровку ниже, и она отлично работает ...

class TableViewController: UITableViewController {

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        refreshControl?.endRefreshing()        
    }

    @IBAction func unwind(sender: UIStoryboardSegue) {            
    }
}

enter image description here

...