2016-10-27 59 views
6

我知道在MPAndroidChart可以處理圖表上的事件。它的documentation都有詳細記錄。是否可以處理一列BarChart上的輕觸事件?

儘管如此,我無法在ios-chart上找到關於相同事件的任何文檔。我知道它的創建者告訴我們,我們也應該遵循MPAndroidChart的documentaiton來處理他的庫,但我無法在Swift 3.0上處理這些事件。

我也找不到任何示例處理這些事件的ios-chart庫。

那麼,是否可以處理ios-chart庫上的tap事件?

編輯:根據@AdamM的反饋,我將把這裏的功能設置爲圖表的數據。

func enterData(valuesChart: [BarChartDataEntry]){ 
    let chartDataSet = BarChartDataSet(values: valuesChart, label: "Total Values") 

    let charData = BarChartData(dataSets: [chartDataSet]) 
    barChartView?.data = charData 
    barChartView?.animate(xAxisDuration: 2.0, yAxisDuration: 2.0) 
} 

在此先感謝!

+0

爲什麼不問問作者? –

+0

@JoshuaNozzi我遵循'問題與問題'部分的步驟:https://github.com/danielgindi/Charts#questions--issues –

回答

5

是的,這個功能是內置在圖表庫中的。確保你的類符合ChartViewDelegate協議。

編輯完整的代碼示例

import UIKit 
import Charts 

@objc(BarChartFormatter) 
public class BarChartFormatter: NSObject, IAxisValueFormatter 
{ 
    var months: [String]! = ["Jan", "Feb", "Mar"] 
    public func stringForValue(_ value: Double, axis: AxisBase?) -> String { 

     return months[Int(value)] 
    } 
} 


class ViewController: UIViewController,ChartViewDelegate 
{ 
    @IBOutlet var barChart : BarChartView! 
    let dataArray = ["Jan", "Feb", "Mar"] 
    override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do any additional setup after loading the view, typically from a nib. 

     self.title = "Testing" 

     let values = [5.2,10.5,15.3] 
     setBarChart(values: values) 
     barChart.delegate = self 
    } 

    //MARK: Chart delegate methods 
    func chartValueSelected(_ chartView: ChartViewBase, entry: ChartDataEntry, highlight: Highlight) { 

     let pos = NSInteger(entry.x) 
     print(dataArray[pos]) 
    } 

    func chartValueNothingSelected(_ chartView: ChartViewBase) 
    { 

    } 
    //MARK: Set chart 
    func setBarChart(values: [Double]) 
    { 
     var dataEntries: [BarChartDataEntry] = [] 

     for i in 0..<values.count { 
      let dataEntry = BarChartDataEntry(x: Double(i), y: values[i]) 

      dataEntries.append(dataEntry) 
     } 
     let dataSet = BarChartDataSet(values: dataEntries, label: "") 
     var dataSets : [IChartDataSet] = [IChartDataSet]() 
     dataSets.append(dataSet) 

     let format:BarChartFormatter = BarChartFormatter() 
     let xAxis = barChart.xAxis 
     xAxis.granularity = 1.0 
     xAxis.labelPosition = .bottom 
     xAxis.valueFormatter = format 


     let chartData = BarChartData(dataSets: dataSets) 
     barChart?.data = chartData 

    } 
} 
+0

嗨@AdamM,謝謝你的回答,但我無法做到工作。我應該在哪裏添加'barChart?.delegate = self'。在我點擊我的CombinedChart的任何列後,這些函數中的任何內容似乎都不會被執行。 –

+0

檢查編輯。如果您還有其他問題,我可以在明天早上再次提供完整的代碼樣本 – AdamM

+0

明天我將再次嘗試使用我的MacBook,如果它工作或不會,我會回覆您。再次感謝你:) –

1

對於IOS圖表3.略去dataSetIndex!

func chartValueSelected(_ chartView: ChartViewBase, entry: ChartDataEntry, highlight: Highlight) 
{...} 
+0

是的,就是這樣。問題是dataSetIndex!但是現在我懷疑了。我怎樣才能訪問我自己的列? –

+0

非常感謝您的幫助!最後@AdamM完成了代碼示例。 –

相關問題