2

更新したい UILabel があります。Ctrlキーを押しながら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

sleepここでプログラムの実行を停止し、1 秒後sleepにテキストを更新しているため、このように 100 が表示されることはありません。これを行いたい場合は、これに を使用できます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. "100"UI サブシステムは、ラベルをに設定するコマンドを取得する前に、ラベルを値に更新する機会を得られないため、これが問題"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"。したがって、テキストの変更は表示されません。代わりにanNSTimerを使用してこれを行い、テキストをセレクターのラベルに割り当てます。

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

update メソッドで、要件に従って最新のテキストを設定します。

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