Попытка повторно использовать таймер для cellForRowAtIndexPath - PullRequest
0 голосов
/ 19 сентября 2018

Итак, моя цель - повторно использовать таймер для каждой ячейки.Все работает нормально, кроме одного тонкого пункта.Cell.indexpath.row начинается с 1 вместо 0. И даже когда я прокручиваю до вершины и отскакивает назад, он переходит к 1. Проблема в том, что таймер создается на основе IndexPath.Я пробовал немало обходных путей увеличения размера ячейки, безуспешно пробуя маршрут начала и конца обновлений, но, похоже, не могу это зафиксировать. Любые предложения, основанные на коде, который у меня уже есть, или новое решение дляпроблема?

TimerVC

     var timer = Timer()
    func numberOfSections(in tableView: UITableView) -> Int {
    return 1
}

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return LiveActivityArray.count

}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

        if let cell = tableView.dequeueReusableCell(withIdentifier: "liveCell", for: indexPath) as? liveActivitiesCell {
            //print("VISBLE CELL \(tableView.indexPathsForVisibleRows)")
            // var visibleCells = self.tableview.visibleCells
var prop = hudProp()
                    Prop = LiveActivityArray[indexPath.item]
            cell.configureCell(properties: Prop, timer: &timer)
                    cell.property = Prop
                    cell.delegateFavorite = self
                    cell.delegate = self
                    cell.indexpath = indexPath
                    print("INDEX PATH CELL \(cell.indexpath.row)")

                    cell.StartTimerFilter(timer: &timer)

                    return cell
    }
    }
      return UITableViewCell()

}

TableviewCell

func configureCell(properties: hudProp, timer: inout Timer) {

  if DataService.instance.BothDatesReturnedTrue == true {
        timer.invalidate()
    StartTimerFilter(timer: &timer)
    }


@objc func TimerFuncFilter(timer: Timer) {

     property.getAuctionTime(property.Begin, AuctionEnd: property.End, postAuctionStart: _leftLabel: leftTime, _leftLabelDayHour: leftTimeDaysHrs, _midLabel: midTime, _midLabelHourMin: midTimeHrsMin, _rightLabel: rightTime, _rightLabelMinSec: rightTimeMinSec, _timer: timer, EndsLabelFunc: EndsOnLabel, EndsDateLabelFunc: EndsOnDateLabel)
    }
}
func StartTimerFilter(timer: inout Timer) {
    timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(liveActivitiesCell.TimerFuncFilter), userInfo: nil, repeats: true)
     DataService.instance.BothDatesReturnedTrue = false
}

Итак, как вы можете видеть, я продолжаю делать недействительным таймер для каждой новой ячейки, но опять же проблема в том, что онначинается с одного.Могу ли я продолжать использовать этот код и что-то изменить или мне следует переосмыслить архитектуру этой проблемы.

Заранее спасибо, я уже несколько недель пытаюсь решить эту проблему с помощью множества неудачных решений.

1 Ответ

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

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

func prepareForReuse() {
super.prepareForReuse
 timer.invalidate
}
...