2017-03-14 84 views
3

我正在開發使用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) ") 
    } 

} 

回答

4

檢查觸摸事件部分在您的Appcoda tutorial中,您會發現ChartViewDelegate方法chartValueSelected,因此您需要使用該方法而不是UITapGestureRecognizer

func chartValueSelected(_ chartView: ChartViewBase, entry: ChartDataEntry, highlight: Highlight) { 
    print("\(entry.value) in \(yourArray[entry.xIndex])") 
} 
+0

Hi Nirav。感謝您的回覆。但即使遵循鏈接中提供的步驟後,它也不會調用chartValueSelected函數。我想知道爲什麼?我用ChartViewDeleage擴展了這個類,添加了pieChartView.delegate = self,但仍然無法工作。 – NGR

+0

@NGR請使用當前代碼編輯您的帖子,並檢查代理是否設置正確。 –

+0

請您找到我更新的代碼 – NGR

0

handleTap,使用手勢識別的locationInView找出圖表的哪一部分(如果有的話)龍頭處於,並作出相應迴應。

相關問題