Обновите UITableViewCell с помощью таймера, не блокируя пользовательский интерфейс - PullRequest
0 голосов
/ 25 января 2019

Я пытаюсь создать UITableView, который содержит группу ячеек, которые отсчитывают от значения.Изначально я просто запускал NSTimer в ViewController при повторении, чтобы запустить функцию, которая обновит метки, а затем запустит reloadData для таблицы, и это технически работает, но с некоторыми проблемами.

Чтобы добавить немного больше, я хорошо знаю, что NSTimer не точен как таймер, поэтому я использую расчет даты для времени на этикетках.Я также подумал об использовании CADisplayLink, чтобы обновление синхронизировалось с экраном, но это столкнулось с проблемами при прокрутке таблицы, что делало ее очень нервной.Другая проблема заключается в том, что при вводе команды Edit для таблицы пользовательский интерфейс не может удалить строки из-за обновления.

Итак, с тех пор я рассмотрел возможность перемещения своего таймера в каждую UITableViewCell и могу сказать, что онвыполняется через консоль, но таблица не обновляется.Это имеет смысл, учитывая, что он не может запустить reloadData для таблицы, но я немного застрял в том, куда идти дальше.

Я нашел подобную нить здесь идаже попробовал предложенный здесь AsyncTimer но либо я делаю что-то не так, либо это не совсем те же проблемы?Любая помощь приветствуется, спасибо!

var timer = Timer()

self.timer = Timer.scheduledTimer(timeInterval: 0.1, target: self, selector: #selector(self.checkTimers), userInfo: nil, repeats: true)

@objc func checkTimers() {
    for counter in counters {
        if counter.isActive {
            counter.updateSeconds()
        }
    }
    tableView.reloadData()
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...