如何在tableview单元格中实现iOS Chart?

时间:2015-11-03 01:05:24

标签: ios swift ios-charts

我正在使用iOS图表(https://github.com/danielgindi/ios-charts),它在普通视图控制器中运行良好。但是,我想在tableview单元格中实现这些图表,其中数据源将根据单元格而不同。此外,显示此图表的视图的出口位于我的单元子类中。如何在我的单元子类中的视图中显示此代码(在非重复视图控制器中工作的位置)?在此先感谢!!

class ChartViewController: UIViewController {

   @IBOutlet weak var lineChartView: LineChartView!

      override func viewDidLoad() {
         super.viewDidLoad()

         let candidates = ["Jan", "Feb", "Mar", "Apr", "May", "Jun"]
         let ratings = [33.0, 20.0, 13.0, 9.0, 8.0, 6.0]

         setChart(candidates, values: ratings)
      }

      func setChart(dataPoints: [String], values: [Double]) {

         var dataEntries: [ChartDataEntry] = []

         for i in 0..<dataPoints.count {

            let dataEntry = ChartDataEntry(value: values[i], xIndex: i)

            dataEntries.append(dataEntry)
         }

         let lineChartDataSet = LineChartDataSet(yVals: dataEntries, label: "Rating")
         let lineChartData = LineChartData(xVals: dataPoints, dataSet: lineChartDataSet)
         lineChartView.data = lineChartData
         lineChartView.animate(xAxisDuration: 2.0)
      } 
}

2 个答案:

答案 0 :(得分:3)

您可以为表格视图单元子类设置单元格视图,以便可以通过将视图控制器中的所有内容复制到原型表视图单元格中来使用故事板中的LineChartView。

请记住在故事板的Identity Inspector中设置自定义单元格的类。

添加一些属性以保存图表的参数。当您在cellForRowAtIndexPath:中调出单元格时,可以设置这些。

例如:

class MyTableViewCell: UITableViewCell {
    @IBOutlet weak var lineChartView: LineChartView!
    var candidates: Array<String>?
    var ratings: Array<Float>?

当您调出单元格时,可以设置属性:

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {        
    let cell = tableView.dequeueReusableCellWithIdentifier(“chartCell”, forIndexPath: indexPath)
    candidates = someCandidatesArrayForIndexPath(indexPath)
    ratings = someRatingsArrayForIndexPath(indexPath)
    cell.setChart()
    return cell
}

因此,当您返回单元格时,它将设置属性以根据其索引路径显示不同的视图。我在示例中使用的函数someCandidatesArrayForIndexPath()和someRatingsArrayForIndexPath()获取了需要显示的值。你必须写这些函数。

答案 1 :(得分:0)

目标C

子类find -type f -exec md5sum "{}" +

find -type f -print0 |xargs -0 md5sum

func foo(completionBlock: (String) -> () = { _ in }) {}

中配置图表

UITableViewCell@interface ChartTVCell : UITableViewCell <ChartViewDelegate> @property (nonatomic, strong) IBOutlet CombinedChartView *chartView; @end

的instanceVar
tableView:cellForRowAtIndexPath:

获取数据

我从网络服务电话中获取数据,divChartDataCombinedChartData我的数据

else if (indexPath.section == 2) {
    ChartTVCell *cell = [tableView dequeueReusableCellWithIdentifier:@"chartCell" forIndexPath:indexPath];

    cell.chartView.data = divChartData; // <-- this is where your chart data is located. 
    cell.chartView.noDataText = divChartText;
    cell.chartView.tag = 101;

    cell.chartView.delegate = self;
    ...
    // blah blah blah, set up your charts
    ...
    cell.chartView.xAxis.spaceBetweenLabels = 2.0;

    return cell;
}

注意:我更喜欢使用varData图表,因为能够从一行更改为一个点,然后分散到饼图并返回到行,而不必进行太多更改(即:您无法添加{{1}转到NSMutableArray