2

我有一个要更新的 UILabel。它已通过 ctrl-cicking 并通过 XIB 文件添加到类中。我在等待短暂的延迟后尝试更新标签文本。到目前为止,除了下面的代码之外,没有其他任何事情发生。但是,当我运行它时,模拟器会暂时空白并直接将我带到最后更新的文本。它没有向我显示100只是200.

如何让标签按照我的意愿进行更新。最终,我试图在标签内设置一个递减计时器。

从 XIB 链接到头文件的标签:

@property (strong, nonatomic) IBOutlet UILabel *timeRemainingLabel;

在实施中:

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.timeRemainingLabel.text = @"100";
    sleep(1);
    self.timeRemainingLabel.text = @"200";    
}
  • 已经合成了。

  • XCode 4.3.2、Mac OSX 10.7.3、iOS 模拟器 5.1(运行 iPad)、iOS 5

4

3 回答 3

3

它永远不会像这样向您显示 100,因为您在sleep这里使用的是停止程序的执行,并且在 1 秒后sleep您正在更新文本。如果你想这样做,那么你可以使用一个NSTimer

像这样更改上面的代码:

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.timeRemainingLabel.text = @"100";

    [NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(updateLabel) userInfo:nil repeats:NO];

}

- (void) updateLabel
{
    self.timeRemainingLabel.text = @"200"; 
}
于 2012-05-13T04:12:03.200 回答
3

您的实现的问题是执行序列在sleep. 这就是问题所在,因为 UI 子系统在获得将标签"100"设置为"200".

要正确执行此操作,首先您需要在 init 方法中创建一个计时器,如下所示:

timer = [NSTimer scheduledTimerWithTimeInterval: 1.0 target:self selector:@selector(updateLabel) userInfo:nil repeats: YES];

然后你需要为你的updateLabel方法编写代码:

-(void) updateLabel {
    NSInteger next = [timeRemainingLabel.text integerValue]-1;
    timeRemainingLabel.text = [NSString stringWithFormat:@"%d", next];
}
于 2012-05-13T04:13:01.763 回答
1

在视图尚未加载之前,您的视图不会出现,并且标签的文本timeRemainingLabel@"200"发生这种情况的时候。所以你看不到文本的变化。NSTimer改为使用 an并将文本分配给选择器中的标签:

timer = [NSTimer scheduledTimerWithTimeInterval:timeInSeconds target:self selector:@selector(updateText) userInfo:nil repeats: YES/NO];

并在您的更新方法中,根据您的要求设置最新文本:

-(void) updateText {
    self.timeRemainingLabel.text = latestTextForLabel;
}
于 2012-05-13T04:12:38.703 回答