1

您好我有基于导航的应用程序,其中一个视图中有一个计时器。(查看方式:A、B 和 C)

当我启动计时器时,我在 C 中有计时器,它工作正常,但是当我推回任何视图并再次来到视图 C 时,它没有显示更新的值。

这是我的代码。

应用代理

-(int)updateTimer
{
    timer_value--;
    return timer_value;

}

查看“C”代码

- (IBAction)buttonClick:(id)sender {
    [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(update) userInfo:nil repeats:YES];
} 



 -(void)update
    {

        MFAppDelegate *appDelegate = (MFAppDelegate *) [[UIApplication sharedApplication]delegate];
        int Time=[appDelegate updateTimer];

        int minute=Time/60;
        int second=Time-(minute*60);

        NSString *strValue=[NSString stringWithFormat:@"%d:%d",minute,second];
 NSLog(@"%@",self.lbl_timer.text);
        [self.lbl_timer setText:strValue];
    }

每次都调用更新函数,并且标签文本的 NSlog 显示正确。

有什么我做错了吗?请帮帮我。

4

3 回答 3

2

在你的课上

-(void)update
{

    MFAppDelegate *appDelegate = (MFAppDelegate *) [[UIApplication sharedApplication]delegate];
    int Time=[appDelegate updateTimer];

    int minute=Time/60;
    int second=Time-(minute*60);

    NSString *strValue=[NSString stringWithFormat:@"%d:%d",minute,second];
    NSLog(@"%@",self.lbl_timer.text);
    [[NSNotificationCenter defaultCenter] postNotificationName:@"DoUpdateLabel" object:strValue userInfo:nil];

}
- (void) updateLabel:(NSString *)string
{
    yourLabel.text = string;
}

- (void)viewDidLoad
{
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(updateLabel:) name:@"DoUpdateLabel" object:nil];
}
于 2013-05-22T08:35:14.603 回答
1

我认为您所指的视图实际上是视图控制器。当您从导航控制器堆栈中的视图控制器返回到前一个视图控制器时,根据您的代码,如果您不保留它,它将被释放,我假设这发生在您的情况下。

正因为如此,每次你推送一个新的视图控制器,它实际上是一个新分配的视图控制器实例,它与之前查看的视图控制器不是同一个实例。

尝试制作视图控制器,例如 A,它具有计时器标签作为推送 A 的视图控制器的强属性。

@property (nonatomic, strong) UIViewController *viewControllerA;

并推送属性,而不是每次推送 A 时分配一个新实例。

[self.navigationController pushViewController:self.viewControllerA animated:YES];
于 2013-05-22T08:21:38.617 回答
0

您需要告诉 UILabel 在其文本属性更改后重新绘制自身。我不知道 Ahmed Z. 描述的方法,但在我的项目中类似于

[[self lbl_timer] setNeedsDisplay];

成功了。

干杯

于 2013-05-22T08:45:23.837 回答