我正在开发使用Swift 3的小型练习IOS应用程序。在该应用程序中,我想要一个饼图。要建立一个饼图,我跟着this链接,饼图正在生成。如何在Swift3 IOS饼图中添加水龙头手势识别?
现在我想添加一个功能。当用户点击任意月份的饼图区域时,它应该打开一个新的控制器并仅显示当月的详细信息。
我设法添加手势识别功能。但是当我点击屏幕的任何部分时,它会打开新的屏幕。我只想限制那个点击功能到饼图部分,并且应该捕获饼图月份。该代码是
let gestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(self.handleTap))
pieChartView.addGestureRecognizer(gestureRecognizer)
和处理自来水代码
func handleTap(gestureRecognizer: UIGestureRecognizer) {
let monthDetail = storyboard?.instantiateViewController(withIdentifier: "MonthTableView") as! MonthDetailsTableViewController
monthDetail = month //Should be the month value of Tap area
navigationController?.pushViewController(monthDetail, animated: true)
}
感谢所有帮助!
==========================
更新的代码
import UIKit
import Charts
import CoreData
class ExpenseViewController: UIViewController, ChartViewDelegate {
@IBOutlet weak var pieChartView: PieChartView!
let months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun"]
var unitsSold = [10.0, 20.0, 10.0, 30.0, 10.0, 10.0]
override func viewDidLoad() {
super.viewDidLoad()
setChart(dataPoints: months, values: unitsSold)
pieChartView.delegate = self
}
func setChart(dataPoints: [String], values: [Double]) {
var dataEntries: [ChartDataEntry] = []
for i in 0..<dataPoints.count {
let dataEntry = PieChartDataEntry(value: values[i], label: dataPoints[i])
dataEntries.append(dataEntry)
}
let pieChartDataSet = PieChartDataSet(values: dataEntries, label: "Units Sold")
let pieChartData = PieChartData(dataSet: pieChartDataSet)
pieChartView.data = pieChartData
}
func chartValueSelected(chartView: ChartViewBase, entry: ChartDataEntry, dataSetIndex: Int, highlight: ChartHighlighter) {
//print("\(entry.value) in \(months[entry.xIndex])")
print("Y = \(entry.y) ")
print("X = \(entry.x) ")
}
}
Hi Nirav。感谢您的回复。但即使遵循链接中提供的步骤后,它也不会调用chartValueSelected函数。我想知道为什么?我用ChartViewDeleage扩展了这个类,添加了pieChartView.delegate = self,但仍然无法工作。 – NGR
@NGR请使用当前代码编辑您的帖子,并检查代理是否设置正确。 –
请您找到我更新的代码 – NGR