是否可以处理 BarChart 列上的点击事件?
Is it possible to handle tap events on a column of BarChart?
我知道在 MPAndroidChart
上可以处理图表上的事件。关于它documentation都是有据可查的。
尽管如此,我无法在 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)
}
提前致谢!
是的,此功能内置于图表库中。确保您的 class 符合 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
}
}
对于 IOS 图表 3. 省略 dataSetIndex!
func chartValueSelected(_ chartView: ChartViewBase, entry: ChartDataEntry, highlight: Highlight)
{...}
我知道在 MPAndroidChart
上可以处理图表上的事件。关于它documentation都是有据可查的。
尽管如此,我无法在 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)
}
提前致谢!
是的,此功能内置于图表库中。确保您的 class 符合 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
}
}
对于 IOS 图表 3. 省略 dataSetIndex!
func chartValueSelected(_ chartView: ChartViewBase, entry: ChartDataEntry, highlight: Highlight)
{...}