Swift 3中使用Beautiful Charts API获取折线图选中值索引问题
解决Swift 3中Beautiful Charts API获取选中值索引的问题
嘿,我看你在Swift 3里用Beautiful Charts做图表时,卡在获取选中条目的索引上了对吧?试了好几种方法都没搞定?我看了你贴的代码,其实问题可能出在方法调用或者对Highlight对象的利用上,给你几个可行的解决方案:
方案一:直接从Highlight对象提取索引
其实Highlight对象本身就自带了你需要的索引信息,完全不用绕去DataSet里查找,这是最直接的方式:
func chartValueSelected(_ chartView: ChartViewBase, entry: ChartDataEntry, highlight: Highlight) { // 如果你的X轴是按连续索引(0、1、2...)设置的,highlight.x就是对应的选中索引 let selectedIndex = Int(highlight.x) print("Selected index: \(selectedIndex)") // 如果是多数据集的图表,还可以用这个获取当前选中的数据集索引 print("DataSet index: \(highlight.dataSetIndex)") }
方案二:修正DataSet中查找索引的方法
如果你的ChartDataEntry的X值不是连续索引(是自定义数值),那可以用entryIndex(for:)方法来查找(注意Swift 3的方法命名格式,你之前的调用写法可能有问题):
func chartValueSelected(_ chartView: ChartViewBase, entry: ChartDataEntry, highlight: Highlight) { // 先安全获取对应的数据集 guard let dataSet = chartView.data?.dataSets[highlight.dataSetIndex] as? IChartDataSet else { print("无法获取目标数据集") return } // 查找当前条目的索引 let selectedIndex = dataSet.entryIndex(for: entry) print("Selected index: \(selectedIndex)") }
小提示
- 创建
ChartDataEntry时,如果希望用X值代表索引,记得把X参数设为连续的整数(0、1、2...),这样highlight.x就能直接转成索引使用。 - 要是你的图表包含多个数据集,一定要用
highlight.dataSetIndex来区分不同的数据集,避免取错数据。
内容的提问来源于stack exchange,提问作者Daniel Cisneros
相关产品推荐
相关产品推荐

