我正在做一个项目,我有一个表格视图,其中包含许多内容非常复杂的单元格。它通常在不超过两个之间,但在例外情况下,最多可以说是 30 个。这些复杂的单元格中的每一个都包含一个折线图。我为此使用 ios-charts ( https://github.com/danielgindi/ios-charts )。
这是 View Controller 的内容的样子:
我用于将 viewController 的 cellForRowAtIndexPath 方法中的单元格出列的代码如下所示:
var cell = tableView.dequeueReusableCellWithIdentifier("PerfgraphCell", forIndexPath: indexPath) as? UITableViewCell
if cell == nil {
let nib:Array = NSBundle.mainBundle().loadNibNamed("PerfgraphCell", owner: self, options: nil)
cell = nib[0] as? FIBPerfgraphCell
}
cell.setupWithService(serviceObject, andPerfdataDatasourceId: indexPath.row - 1)
return cell!
在单元格的代码中,我有一个方法“setupWithService”,它从已经存在的对象“serviceObject”中提取数据源并初始化图形的绘制,如下所示:
func setupWithService(service: ServiceObjectWithDetails, andPerfdataDatasourceId id: Int) {
let dataSource = service.perfdataDatasources[id]
let metadata = service.perfdataMetadataForDatasource(dataSource)
if metadata != nil {
if let lineChartData = service.perfdataDatasourcesLineChartData[dataSource] {
println("starting drawing for \(lineChartData.dataSets[0].yVals.count) values")
chartView.data = lineChartData
}
}
}
现在的问题是:根据图表中要绘制的值的数量(100 到 2000 之间),绘图似乎变得相当复杂。用户注意到,当他向下滚动时:一旦包含如此复杂图表的单元格要出列,滚动就会卡住一小会儿,直到图表被初始化。这当然是丑陋的!
在这种情况下,如果视图控制器接收到绘图所需的数据并仅将相应的单元格从该数组中拉出需要吗?或者有没有办法使图表的初始化异步,以便单元格立即存在但图表在“准备好”时出现?
感谢您的回复!