【问题标题】:SwiftUI iOS CHARTS: How to get highlighted valueSwiftUI iOS CHARTS:如何获得突出显示的值
【发布时间】:2021-03-05 00:29:20
【问题描述】:

使用 iOS 图表(作者 Daniel Gindi https://github.com/danielgindi/Charts)和 SwiftUI,我想从折线图中获取所选值,即用户点击它时突出显示的值。突出显示有效,我可以看到该值的附加行。

经过一番研究,我发现我们必须创建这个函数:chartValueSelected(),但在这种情况下它从未被调用过。我想我必须处理委托,但我没有找到任何使用 SwiftUI 的解决方案或示例。有人可以帮忙吗?谢谢 LineChart

    import Foundation
    import Charts
    import SwiftUI

    struct GraphMeterLine : UIViewRepresentable {
    var xArray:[Float] = [0,1,2,3,4]
    var yArray:[Float] = [0,3,6,2,12]
    var data = LineChartData()
    let chartline = LineChartView()

        func makeUIView(context: Context) -> LineChartView {
            return chartline
        }

        func updateUIView(_ uiView: LineChartView, context: Context) {
            //when data changes chartd.data update is required
            uiView.data = createGraph()
        }
    
    
    func createGraph() -> LineChartData {
        var lineChartEntry = [ChartDataEntry]()
       
            for i in 0..<yArray.count {
                let value = ChartDataEntry(x: Double(xArray[i]), y: Double(yArray[i]))
                lineChartEntry.append(value)
            }
            
        let line1 = LineChartDataSet(entries: lineChartEntry, label: "Number")
        

        data.addDataSet(line1)

                data.setDrawValues(false)
                return data
    }

    public func chartValueSelected(_ chartView: ChartViewBase, entry: ChartDataEntry, highlight: Highlight) {
        print("To Display Values X/Y Values here")
    }
    
        typealias UIViewType = LineChartView
        
    }

【问题讨论】:

    标签: ios swift swiftui ios-charts


    【解决方案1】:

    将尝试另一个想法。我现在无法测试它,所以不确定它是否会工作,但它可以成功构建,请在你身边尝试。我在您的代码中添加了代码:

    var xArray:[Float] = [0,1,2,3,4]
    var yArray:[Float] = [0,3,6,2,12]
    var data = LineChartData()
    let chartline = LineChartView()
    
    class ChartDelegete: ChartViewDelegate {
        func chartValueSelected(_ chartView: ChartViewBase, entry: ChartDataEntry, highlight: Highlight) {
            print("To Display Values X/Y Values here")
        }
    }
    
    let chartDelegete = ChartDelegete()
    
    func makeUIView(context: Context) -> LineChartView {
        chartline.delegate = chartDelegete
        return chartline
    }
    

    评论后更新

    旧答案

    将委托添加到定义

    struct GraphMeterLine : UIViewRepresentable, ChartViewDelegate {
    

    并设置委托

    chartline.delegate = self 
    

    在 makeUIView(context: call 例如。它应该可以工作。

    【讨论】:

    • 感谢您的回复,但这是一个结构(UIViewProtocol)我无法添加 ChartViewDelegate:“非类类型 'GraphMeterLine' 不能符合类协议 'ChartViewDelegate'” 我使用 Class 尝试了不同的解决方案结构函数内部的协调器,但我无法根据需要访问数据。其他想法?
    • 我了解您遇到的问题。我用另一个我现在无法尝试工作的想法编辑了我的答案。请尝试一下。想法似乎很奇怪,但也许可以工作^_^
    • 它工作得非常好。我不敢相信我被困在这个问题上这么久了,呵呵,非常感谢:)
    猜你喜欢
    • 2019-03-31
    • 1970-01-01
    • 1970-01-01
    • 2020-11-18
    • 2016-03-08
    • 2019-10-25
    • 2021-11-04
    • 2018-01-18
    • 1970-01-01
    相关资源
    最近更新 更多