今晚在我的应用程序上工作时,我遇到了一个新的情况。我试图将2个不同的图[每个使用BEMSimpleLineGraph]加载到UITableView的不同行中。我创建了一个自定义单元格,其中包含一个继承自BEMSimpleLineGraphView的UIView。我的视图控制器自然继承自UIViewController
,BEMSimpleLineGraphDelegate
,BEMSimpleLineGraphDataSource
,UITableViewDataSource
和UITableViewDelegate
。
UITableViewDataSource和BEMSimpleLineGraphDataSource都有必需的方法但是当我声明我的表视图的numberOfRowsInSection和cellForRowAtIndexPath方法时,我不能将我的numberOfPointsInLineGraph和valueForPointAtIndex方法放在cellForRowAtIndexPath中,因为它不符合BEMSimpleLineGraphDataSource的要求。
这是我目前的课程:
import Foundation
class FlightsDetailViewController: UIViewController, BEMSimpleLineGraphDelegate, BEMSimpleLineGraphDataSource, UITableViewDataSource, UITableViewDelegate {
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 2
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell: FlightsDetailCell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as FlightsDetailCell
cell.userInteractionEnabled = false
cell.graphView.enableBezierCurve = true
cell.graphView.enableReferenceYAxisLines = true
cell.graphView.enableYAxisLabel = true
cell.graphView.colorYaxisLabel = UIColor.whiteColor()
cell.graphView.delegate = self
cell.graphView.dataSource = self
return cell
}
func lineGraph(graph: BEMSimpleLineGraphView!, valueForPointAtIndex index: Int) -> CGFloat {
let data = [1.0,2.0,3.0,2.0,0.0]
let data2 = [2.0,0.0,2.0,3.0,5.0]
return CGFloat(data[index])
}
func numberOfPointsInLineGraph(graph: BEMSimpleLineGraphView!) -> Int {
return 5
}
}
我将如何让第一个图表显示来自data
的数据,第二个图表显示来自data2
的数据。我的图表现在显示正常,但我无法弄清楚如何为每个图形定义独立的数据集。怎么办呢?
答案 0 :(得分:6)
您需要检查图表的哪个实例正在调用数据源/委托。您可以通过将数据源/委托方法中包含的参数lineGraph
与图表实例进行比较来找到答案。
我对swift不太熟悉,在这里你可以在Objective-C中做到这一点。
- (CGFloat)lineGraph:(BEMSimpleLineGraphView *)graph valueForPointAtIndex:(NSInteger)index
{
if ([graph isEqual:self.myGraph1])
{
return data;
}
else
{
return data2;
}
}