Graphiques: N'obtient datatables de barre sélectionnées que lorsqu'elles sont tapées dans la barre

J'ai utilisé la bibliothèque https://github.com/danielgindi/Charts dans mon projet.
Cela fonctionne parfaitement, mais je veux sélectionner datatables de la barre uniquement lorsque l'user appuie sur la barre.
Actuellement, il returnnera datatables de la barre en dehors du robinet aussi.
Il fournit datatables de barre les plus proches au robinet lorsque l'user tape à l'extérieur de la barre.

J'ai mis en place le graphique à barres comme ceci:

_chartView.delegate = self; _chartView.drawBarShadowEnabled = NO; _chartView.drawValueAboveBarEnabled = YES; _chartView.maxVisibleValueCount = 60; ChartXAxis *xAxis = _chartView.xAxis; xAxis.labelPosition = XAxisLabelPositionBottom; xAxis.labelTextColor = [UIColor whiteColor]; xAxis.labelFont = [UIFont systemFontOfSize:20.f]; xAxis.drawGridLinesEnabled = NO; xAxis.spaceBetweenLabels = 2.0; xAxis.labelWidth = 100; ChartYAxis *leftAxis = _chartView.leftAxis; leftAxis.labelFont = [UIFont systemFontOfSize:20.f]; leftAxis.labelCount = 5; leftAxis.labelTextColor = [UIColor whiteColor]; leftAxis.valueFormatter = [[NSNumberFormatter alloc] init]; leftAxis.valueFormatter.maximumFractionDigits = 1; leftAxis.valueFormatter.negativeSuffix = @"k"; leftAxis.valueFormatter.positiveSuffix = @"k"; leftAxis.valueFormatter.positivePrefix = @"$"; leftAxis.valueFormatter.negativePrefix = @"$"; leftAxis.labelPosition = YAxisLabelPositionOutsideChart; leftAxis.spaceTop = 0.15; leftAxis.customAxisMin = 0.0; // this replaces startAtZero = YES _chartView.legend.position = ChartLegendPositionBelowChartLeft; _chartView.legend.form = ChartLegendFormSquare; _chartView.legend.formSize = 20.0; _chartView.legend.font = [UIFont fontWithName:@"HelveticaNeue-Light" size:20.f]; _chartView.legend.xEntrySpace = 4.0; _chartView.legend.textColor = [UIColor whiteColor]; NSMutableArray *xVals = [[NSMutableArray alloc] init]; for (int i = 0; i < 12; i++) { [xVals addObject:months[i % 12]]; } NSMutableArray *yVals = [[NSMutableArray alloc] init]; NSMutableArray *yValsColor = [[NSMutableArray alloc] init]; [yVals addObject:[[BarChartDataEntry alloc] initWithValue:10 xIndex:1]]; [yVals addObject:[[BarChartDataEntry alloc] initWithValue:15 xIndex:2]]; [yVals addObject:[[BarChartDataEntry alloc] initWithValue:20 xIndex:3]]; [yVals addObject:[[BarChartDataEntry alloc] initWithValue:45 xIndex:4]]; [yVals addObject:[[BarChartDataEntry alloc] initWithValue:30 xIndex:5]]; [yVals addObject:[[BarChartDataEntry alloc] initWithValue:5 xIndex:6]]; [yVals addObject:[[BarChartDataEntry alloc] initWithValue:15 xIndex:7]]; [yVals addObject:[[BarChartDataEntry alloc] initWithValue:22 xIndex:8]]; [yVals addObject:[[BarChartDataEntry alloc] initWithValue:32 xIndex:9]]; [yValsColor addObject:[UIColor yellowColor]]; BarChartDataSet *set1 = [[BarChartDataSet alloc] initWithYVals:yVals label:@"Charges"]; set1.barSpace = 0.35; set1.colors = yValsColor; NSMutableArray *dataSets = [[NSMutableArray alloc] init]; [dataSets addObject:set1]; BarChartData *data = [[BarChartData alloc] initWithXVals:xVals dataSets:dataSets]; [data setValueFont:[UIFont fontWithName:@"HelveticaNeue-Light" size:20.f]]; [data setValueTextColor:[UIColor whiteColor]]; _chartView.data = data; NSArray *arrLabelData = [NSArray arrayWithObjects:@"All", @"1/1/2016 to 9/29/2016", @"All", @"All", @"Date of Billed",nil]; NSArray *arrLabel = [NSArray arrayWithObjects:@"Ins:",@" DOS:",@" Location:",@" Provider:",@" Aging Calculation Based On:",nil]; NSMutableAtsortingbutedSsortingng *strFS = [[NSMutableAtsortingbutedSsortingng alloc] init]; UIColor *color = [UIColor yellowColor]; // select needed color NSDictionary *attrs = @{ NSForegroundColorAtsortingbuteName : color}; NSDictionary *attrsLab = @{ NSForegroundColorAtsortingbuteName : [UIColor whiteColor]}; for(int i = 0; i <arrLabelData.count; i++) { NSSsortingng *strLabData = [arrLabelData objectAtIndex:i]; NSSsortingng *strLab = [arrLabel objectAtIndex:i]; NSAtsortingbutedSsortingng *attSsortingngLab = [[NSAtsortingbutedSsortingng alloc] initWithSsortingng:strLab atsortingbutes:attrsLab]; NSAtsortingbutedSsortingng *attSsortingngLabData = [[NSAtsortingbutedSsortingng alloc] initWithSsortingng:strLabData atsortingbutes:attrs]; [strFS appendAtsortingbutedSsortingng:attSsortingngLab]; [strFS appendAtsortingbutedSsortingng:attSsortingngLabData]; } lblAtsortingbutes.atsortingbutedText = strFS; 

Je veux répondre aux données uniquement lorsque l'user appuie sur la barre.
Quelqu'un a une idée? S'il vous plaît aidez-moi

Merci d'avance.

J'ai la version 2.2.3 des charts dans mon application. Essayez cette implémentation pour résoudre votre problème

1) Ajoutez la fonction à votre file ChartHighlighter.swift .

 public func getBarBounds(e: BarChartDataEntry) -> CGRect { guard let set = self.chart?._data?.getDataSetForEntry(e) as? IBarChartDataSet else { return CGRectNull } let barspace = set.barSpace let y = CGFloat(e.value) let x = CGFloat(e.xIndex) let barWidth: CGFloat = 0.5 let spaceHalf = barspace / 2.0 let left = x - barWidth + spaceHalf let right = x + barWidth - spaceHalf let top = y >= 0.0 ? y : 0.0 let bottom = y <= 0.0 ? y : 0.0 var bounds = CGRect(x: left, y: top, width: right - left, height: bottom - top) self.chart?.getTransformer(ChartYAxis.AxisDependency.Left).rectValueToPixel(&bounds) return bounds } 

2) Mettez à jour la fonction getHighlight dans le file ChartHighlighter.swift .

 public func getHighlight(xx: Double, y: Double) -> ChartHighlight? { let xIndex = getXIndex(x) if (xIndex == -Int.max) { return nil } let dataSetIndex = getDataSetIndex(xIndex: xIndex, x: x, y: y) if (dataSetIndex == -Int.max) { return nil } //Modification for only Bar Selection let dataSet = self.chart!.data!.getDataSetByIndex(dataSetIndex) let e = dataSet.entryForXIndex(xIndex) as! BarChartDataEntry! let rectData = getBarBounds(e) let point = CGPoint(x: x,y: y) let isPointInFrame = CGRectContainsPoint(rectData, point) if (!isPointInFrame) { return nil } //Modification for only Bar Selection return ChartHighlight(xIndex: xIndex, dataSetIndex: dataSetIndex) } 

J'espère que cela vous aidera. Bonne codification …

J'ai un projet avec la même bibliothèque et j'ai été en mesure d'get la fonctionnalité que vous requestz en changeant la fonction getHighlight dans le file ChartHighlighter.swift à ce qui suit:

 /// Returns a Highlight object corresponding to the given x- and y- touch positions in pixels. /// - parameter x: /// - parameter y: /// - returns: public func getHighlight(xx: CGFloat, y: CGFloat) -> ChartHighlight? { print("y: \(y)") let xIndex = getXIndex(x) guard let selectionDetail = getSelectionDetail(xIndex: xIndex, y: y, dataSetIndex: nil) else { return nil } print("selectionDetail: \(selectionDetail.y)") if(y<selectionDetail.y) { return nil } else { return ChartHighlight(xIndex: xIndex, value: selectionDetail.value, dataIndex: selectionDetail.dataIndex, dataSetIndex: selectionDetail.dataSetIndex, stackIndex: -1) } }