2013-01-18 47 views
1

我有一个带有两个选项卡的选项卡式应用程序。刷新ios中的选项卡式应用程序中的UIview

在第二个选项卡上,我绘制了一个图。

但每次按下此选项卡时,UIview都不会刷新。

我试过,

[self.view setNeedsDisplay] 

inside 

- (void)viewDidLoad 

但仍然没有刷新。

我试图从- (void)viewDidLoad代码粘贴到-(void)viewDidAppear

但是什么都没有发生。

等待一个答案。

编辑:整个源代码

- (void)viewDidLoad 
{ 

    //[self.view setNeedsDisplay]; 

    Sensor_VisualizationAppDelegate *delegate = (Sensor_VisualizationAppDelegate *)[[UIApplication sharedApplication] delegate]; 
    valuePass = delegate.valuepass; 
    timePass = delegate.timepass; 

    NSNumber *value1 = [valuePass objectAtIndex:0]; 
    NSNumber *value2 = [valuePass objectAtIndex:1]; 
    NSNumber *value3 = [valuePass objectAtIndex:2]; 
    NSNumber *value4 = [valuePass objectAtIndex:3]; 
    NSNumber *value5 = [valuePass objectAtIndex:4]; 
    NSNumber *value6 = [valuePass objectAtIndex:5]; 
    NSNumber *value7 = [valuePass objectAtIndex:6]; 



    NSString *time1 = [timePass objectAtIndex:0]; 
    NSString *time2 = [timePass objectAtIndex:1]; 
    NSString *time3 = [timePass objectAtIndex:2]; 
    NSString *time4 = [timePass objectAtIndex:3]; 
    NSString *time5 = [timePass objectAtIndex:4]; 
    NSString *time6 = [timePass objectAtIndex:5]; 
    NSString *time7 = [timePass objectAtIndex:6]; 



    OVGraphView *graphview=[[OVGraphView alloc]initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.height, 300) ContentSize:CGSizeMake(960, 300)]; 
    graphview.reverse=YES; 
    graphview.graphcolor=[UIColor colorWithRed:0.31 green:0.73 blue:0.78 alpha:1.0]; 
    [self.view addSubview:graphview]; 
    [graphview setPoints:@[ [[OVGraphViewPoint alloc]initWithXLabel:time1 YValue:value1], 
    [[OVGraphViewPoint alloc]initWithXLabel:time2 YValue:value2], 
    [[OVGraphViewPoint alloc]initWithXLabel:time3 YValue:value3], 
    [[OVGraphViewPoint alloc]initWithXLabel:time4 YValue:value4], 
    [[OVGraphViewPoint alloc]initWithXLabel:time5 YValue:value5], 
    [[OVGraphViewPoint alloc]initWithXLabel:time6 YValue:value6], 
    [[OVGraphViewPoint alloc]initWithXLabel:time7 YValue:value7] 
    ]]; 

[super viewDidLoad];  
} 
+1

你是如何绘制图形的?只要切换到该选项卡,viewWillAppear/viewDidAppear就会被调用。 viewDidLoad只会在第一次加载视图时调用。 –

+0

@JamesP我正在使用名为[OVGraphView](https://github.com/owenv/OVGraphView)的框架来绘制它,Lemme发布了整个代码。但是,我应该如何将viewDIdload链接到我的UIview,因为当我试图将代码复制粘贴到ViewDidLoad时,什么都没有发生。 – spaniard89

+0

我对此并不熟悉,但如果您在graphView上调用setNeedsDisplay,而不是self.view,会怎么样。 (这应该在viewWillAppear里面)。 –

回答

2

为了检测标签栏倒是可以实现的UITabBarController委托如下:

- (void)tabBarController:(UITabBarController *)tabBarController 
didSelectViewController:(UIViewController *)viewController 
{ 
    NSLog(@"controller class: %@", NSStringFromClass([viewController class])); 
    NSLog(@"controller title: %@", viewController.title); 
} 

当您创建标签栏。然后你就可以得到视图控制器的视图的实例,并调用setNeedsDisplay

在为ovgraphview源代码以及调用此方法调用设定值后一路某处:

-(void)setPlotViewPoints:(NSArray *)points Reversed:(BOOL)reversebool{ 
    if (reversebool) { 
     self.plotpoints=[[points reverseObjectEnumerator]allObjects]; 
    }else{ 
     self.plotpoints=points; 
    } 
    spacebetweenpoints=self.frame.size.width/[points count]; 
    int d=0; 
    for (OVGraphViewPoint *pt in points) { 
     if ([pt.yvalue intValue]>d) { 
      d=[pt.yvalue intValue]; 
     } 
    } 
    yscale=(self.frame.size.height-40)/d; 
    [self setNeedsDisplay]; 
} 

在最后一行你会发现他们在设置点后在视图上调用setNeedsDisplay,因此在创建图之前不需要调用它。但既然你做了,看起来这与图的内部植入有关。当你调用setNeedsDisplay时,它会一直等到下一个运行循环显示,并且在上面的方法中调用它。现在,我们在视图层次结构中的不同层上调用了不止一个,并且它变得讨厌。我认为这是问题所在。

为了您的情况,我会将setNeedsDisplay放在一起,或者只是在上面给出的委托方法中调用setPoints,或者如果您没有使用tabbarcontroller而不是实现tabBar:didSelectItem:标签栏委托来检测您的选项卡是通过在创建标签栏项目时指定标签或检查其标题以验证其标题,然后调用设定点来单击。

这有点长时间让我知道,如果你需要我尝试和澄清它更多。

+0

我在哪里必须调用'[self.view setNeedsDisplay];'它会在' - (void)viewDidLoad'中,我的意思是函数的第一行,因为当我这样做时,我得到视图,但我的图不被绘制,但是当我评论'[self.view setNeedsDisplay];'我得到图。 – spaniard89

+0

因此,setNeedsDisplay将为系统设置一个标志,以调用该视图的drawRect方法。你如何将数据加载到图表中?那它在viewDidLoad呢? –

+0

我上面编辑了我的问题,它有代码片段和显示,我如何加载我的图形,是的,它是在ViewDidload内。 – spaniard89

相关问题