在 UITableView 中设置 BEMSimpleLineGraph Plot

Setting up BEMSimpleLineGraph Plot within UITableView

今晚在开发我的应用程序时,我遇到了一个新情况。我正在尝试将 2 个不同的图形 [使用 BEMSimpleLineGraph] 分别加载到 UITableView 的不同行中。我创建了一个自定义单元格,其中包含一个继承自 BEMSimpleLineGraphView 的 UIView。我的视图控制器自然继承自 UIViewControllerBEMSimpleLineGraphDelegateBEMSimpleLineGraphDataSourceUITableViewDataSourceUITableViewDelegate

UITableViewDataSource 和 BEMSimpleLineGraphDataSource 都有必需的方法,但是当我声明我的 table 视图的 numberOfRowsInSection 和 cellForRowAtIndexPath 方法时,我无法将我的 numberOfPointsInLineGraph 和 valueForPointAtIndex 方法放在 cellForRowAtIndexPath 中,因为这不符合要求BEMSimpleLineGraphDataSource.

这是我现在的 class:

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 的数据。我的图表现在显示正常,但我不知道如何为每个图表定义独立的数据集。这怎么能做到?

您需要检查图的哪个实例正在调用 datasource/delegate。您可以通过将 datasource/delegate 方法中包含的参数 lineGraph 与您的图形实例进行比较来找出答案。

我对 swift 还不够熟悉,这里是您在 Objective-C.

中的操作方法
- (CGFloat)lineGraph:(BEMSimpleLineGraphView *)graph valueForPointAtIndex:(NSInteger)index 
{
    if ([graph isEqual:self.myGraph1])
    {
        return data;
    }
    else
    {
        return data2;
    }
}