2016-10-27 4 views
6

나는 MPAndroidChart에있는 차트에서 이벤트를 처리 할 수 ​​있음을 알고 있습니다. 그 documentation에 모두 잘 문서화되어 있습니다.BarChart 열에서 탭 이벤트를 처리 할 수 ​​있습니까?

그럼에도 불구하고 동일한 이벤트에 대한 문서는 ios-chart에서 찾을 수 없습니다. 창작자가 그의 라이브러리에 대한 MPAndroidChart의 문서를 따라야한다는 것을 알았지 만 Swift 3.0에서 그 사건을 처리 할 수는 없습니다.

또한 ios-chart 라이브러리의 이벤트를 처리 할 수있는 예제를 찾을 수 없습니다.

그래서 ios-chart 라이브러리에서 탭 이벤트를 처리 할 수 ​​있습니까?

편집 :@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 프로토콜을 준수하는지 확인하십시오.

편집 전체 코드 샘플 IOS 차트 3 생락 dataSetIndex를 들어

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

편집을 확인하십시오. 더 이상 문제가있는 경우, 내일 macbook을 다시 가지고있을 때 내일 아침에 전체 코드 샘플을 올려 놓을 수 있습니다. – AdamM

+0

내일 macbook을 다시 열어 볼 때 내일 시도 할 것이고, 제대로 작동하는지 여부를 알려 드리겠습니다. 다시 고마워요 :) –

1

!

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

예, 그렇습니다. 문제는 dataSetIndex입니다! 하지만 지금은 의심 스럽습니다. 내가 탭하는 열 자체에 어떻게 액세스 할 수 있습니까 ?? –

+0

도움 주셔서 대단히 감사합니다! 마침내 @AdamM은 코드 예제를 완성했습니다. –