-1

実行されるすべてのステップをリストするビューにテーブルビューがあります。ステップが実行されたときにマークされたステップを表示したい。私が直面している問題は、手順がすべてのステップを実行するまでテーブルビューが更新されないことです。その結果、すべてのステップが同時にマークされて表示されます。

これは、ユーザーがボタンを押したときに実行を開始する私の関数です。

-(void)Initialiseer {
    //do something for the first step
    [self.MyTableView reloadData];
    [self.MyView setNeedsDisplay];

    //do something for the second step
    [self.MyTableView reloadData];
    [self.MyView setNeedsDisplay];

    //do something for the third step
    [self.MyTableView reloadData];
    [self.MyView setNeedsDisplay];
}

MyView はビュー IBOutlet です。MyTableView はテーブルビュー IBOutlet です。[self.view setNeedsDisplay] と [self.view setNeedsDisplay] も試しました。MyTableView setNeedsDisplay] ですが、それも機能しません。また、テーブルビューからセルを取得して、セル自体に変更を加えようとしました。プロシージャの実行が完全に終了するまで、何も更新されません...

誰かが私が間違っていることを教えてもらえますか? 私はiOS開発に不慣れで、検索、読み、試しましたが、これまでのところ答えが見つかりませんでした.

4

1 に答える 1

0

実行ループを読む必要があると思いますsetNeedsDisplay(これはあなたが期待していることではないと思います)。基本的に、UI はコードの実行が完了するまで更新されません。複雑な計算を表示するために必要なパターンは、次のようなものです。

-(void)Initialiseer {
  dispatch_async(dispatch_get_global_queue(QOS_CLASS_BACKGROUND, 0), ^{
    //do something for the first step

    dispatch_sync(dispatch_get_main_queue(), ^{
      [self.MyTableView reloadData];
    });

    //do something for the second step
    dispatch_sync(dispatch_get_main_queue(), ^{
      [self.MyTableView reloadData];
    });

    //do something for the third step
    dispatch_sync(dispatch_get_main_queue(), ^{
      [self.MyTableView reloadData];
    });
  });
}
于 2015-05-29T17:53:46.270 に答える