刷新时闪烁的部分标题?

时间:2015-05-14 21:49:09

标签: ios uitableview swift refresh sectionheader

我有一系列UITableViewCells每秒更新一次。

首次尝试:为了执行此类更新,我调用self.tableView.reloadData()重新加载所有单元格内容。

第二次尝试:我尝试使用UITableViewAnimation.None刷新部分,但这会使部分标题消失,然后每秒重新出现。

在第一次尝试中,我得到一个"闪烁"因为视图不断被刷新。我想要它,以便闪烁效果消失。在第二次尝试中,如上所述,节标题消失,然后每秒重新出现。

在我的代码中,我想不断更新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
}

1 个答案:

答案 0 :(得分:0)

您只是想更新标签吗?您不需要重绘整个标题视图。如果您只是更改标签文本并可能在标签上调用setNeedsDisplay,它应该自行处理。