我有一系列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
}
答案 0 :(得分:0)
您只是想更新标签吗?您不需要重绘整个标题视图。如果您只是更改标签文本并可能在标签上调用setNeedsDisplay,它应该自行处理。