1

私はその一連のUITableViewCells更新を毎秒程度行っています。

最初の試行: このような更新を実行するために、self.tableView.reloadData()すべてのセルの内容を再読み込みするように呼び出します。

2 回目の試行: でセクションを更新しようとしましたUITableViewAnimation.Noneが、セクション ヘッダーが消えてから、毎秒再表示されます。

最初の試行では、ビューが常に更新されるため、「ちらつき」効果が発生します。ちらつき効果がなくなるようにしたい。2 回目の試行では、前述のように、セクション ヘッダーが消えてから、1 秒ごとに再表示されます。

私のコードでは、headerView.headerTimeLeft.textラベルを常に更新したいと考えています。

これが私の試みです:

override func viewDidAppear(animated: Bool) {
    super.viewDidAppear(animated)
    self.refreshTimer = NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: "refreshView:", userInfo: nil, repeats: true)
}

func refreshView(timer: NSTimer){
    //Attempt 2
    var visibleRows:NSArray = self.tableView.indexPathsForVisibleRows()!
    var sections = NSMutableIndexSet()
    for indexPath in visibleRows{
        sections.addIndex(indexPath.section)
    }

    //Attempt 1 was simply to reload the Data
    //self.tableView.reloadData()
    //Attempt 2 was to reload the sections
    self.tableView.reloadSections(sections, withRowAnimation: UITableViewRowAnimation.None)
}

func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
    //Show section header cell with name of event creator
    var cellIdentifier = "SectionHeaderCell"
    var headerView = tableView.dequeueReusableCellWithIdentifier(cellIdentifier) as! SectionHeaderCell

    headerView.backgroundColor = UIColor.whiteColor()
    headerView.creator.text = self.events[section].eventCreator()

    var fromDate = self.events[section].fromDate()! + " " + self.events[section].fromTime()!

    var dateFormatter = NSDateFormatter()

    dateFormatter.dateFormat = "MM/dd/yy hh:mm a z"
    var eventStartDate = dateFormatter.dateFromString(fromDate)?.timeIntervalSince1970

    var timeUntilEnd = eventStartDate! - NSDate().timeIntervalSince1970

    //Display the time left
    var seconds = timeUntilEnd % 60
    var minutes = (timeUntilEnd / 60) % 60
    var hours = timeUntilEnd / 3600
    headerView.headerTimeLeft.text = NSString(format: "%dh %dm %ds", Int(hours), Int(minutes), Int(seconds)) as String
    return headerView
}
4

1 に答える 1