2012-03-05 31 views
1

我是IOS開發的新手,我有一個問題繪製與Core-Plot的pieChart的傳說。餅圖很好地顯示,但它不顯示它的圖例。我已經閱讀了很多關於這個問題的文章(StackOverFlowResponseTopic),但我找不到爲什麼它不適用於我。核心劇情:添加傳奇pieChart與「legendTitleForPieChart」不起作用

我已經在tabBar應用程序的第二個ViewController中初始化了一個PieChartView。

這是我的餅圖的代碼:

// 
// PieChartView.m 
// ExerciceRecap 
// 
// Created by Alex on 02/03/12. 
// Copyright (c) 2012 __MyCompanyName__. All rights reserved. 
// 

#import "PieChartView.h" 
#import "ModeleDeDonnes.h" 
#import "CorePlot-CocoaTouch.h"  

@implementation PieChartView 

@synthesize graph=_graph; 
@synthesize hostingView = _hostingView; 
@synthesize graphData = _graphData; 
@synthesize myLabels = _myLabels;  

- (id) initWithHostingView:(CPTGraphHostingView *)hostingView andData:(NSMutableArray *)data{ 
    self = [super init]; 

    if (self != nil){ 
     self.hostingView = hostingView; 
     self.graph = nil; 

     // Manage data from dataController 
     _myLabels = [[[NSMutableArray alloc]init]autorelease]; 
     NSMutableArray *myValues = [[[NSMutableArray alloc]init]autorelease]; 

     for (NSUInteger i = 0; i < [data count]; i++) { 
      ModeleDeDonnes *theObject = [data objectAtIndex:i]; 
      [_myLabels addObject:theObject.nom]; 
      [myValues addObject:theObject.montant]; 
     } 
     self.graphData = myValues; 
    } 
    return self; 
} 

-(void)initialisePieChart{ 

    if ([_graphData count] == 0){ 
     NSLog(@"No data"); 
     return; 
    } 

    if((self.hostingView == nil) || (self.graphData == nil)){ 
     NSLog(@" Cannot initialse hostingView"); 
     return; 
    } 

    if (self.graph != nil){ 
     NSLog(@" graph already exists"); 
     return; 
    } 

    CGRect frame = [self.hostingView bounds]; 
    self.graph = [[[CPTXYGraph alloc] initWithFrame:frame] autorelease]; 

    //Tie the graph we have created with the hosting view 
    self.hostingView.hostedGraph = self.graph; 

    CPTPieChart * pieChart = [[[CPTPieChart alloc]init]autorelease]; 
    pieChart.dataSource = self; 
    pieChart.pieRadius = 100.0; 
    pieChart.identifier = @"pieChart1"; 
    pieChart.startAngle = M_PI_2; 
    pieChart.sliceDirection = CPTPieDirectionCounterClockwise; 
    [email protected]"My PieChart";  

    // Add legend 
    CPTLegend *theLegend = [CPTLegend legendWithGraph:_graph]; 
    theLegend.numberOfColumns = 2; 
    theLegend.fill = [CPTFill fillWithColor:[CPTColor redColor]]; 
    //theLegend.borderLineStyle = [CPTLineStyle lineStyle]; 
    theLegend.cornerRadius = 5.0;  
    _graph.legend = theLegend; 

    _graph.legendAnchor = CPTRectAnchorBottom; 
    _graph.legendDisplacement = CGPointMake(0.0, 30.0); 

    [self.graph addPlot:pieChart]; 

} 

-(NSUInteger)numberOfRecordsForPlot:(CPTPlot *)plot{ 
    return [self.graphData count]; 
} 

-(NSNumber *)numberForPlot:(CPTPlot *)plot field:(NSUInteger)fieldEnum recordIndex:(NSUInteger)index{ 
    return [self.graphData objectAtIndex:index]; 
} 

-(NSString *)legendTitleForPieChart:(CPTPieChart *)pieChart 
         recordIndex:(NSUInteger)index{ 
    NSLog(@"LegendTitleForPieChart"); 
    return [NSString stringWithFormat:@"Ma légende", index];   
} 

@end 

這是的viewController

- (void)viewWillAppear:(BOOL)animated 
{ 
    [super viewWillAppear:animated]; 



    self.pieChart =[[PieChartView alloc] initWithHostingView:_myGraphView  andData:_dataController.masterDataList]; 
    [self.pieChart initialisePieChart];   
} 

非常感謝和SRY我的英文不好的代碼。

回答

0

嘗試重新加載在你的viewController的viewWillAppear中方法的託管視圖的數據:

- (void)viewWillAppear:(BOOL)animated 
{ 
    [super viewWillAppear:animated]; 

    self.pieChart =[[PieChartView alloc] initWithHostingView:_myGraphView  andData:_dataController.masterDataList]; 
    [self.pieChart initialisePieChart];  

    [self.pieChart.hostingView reloadData];  
}