-1

uibutton (この場合は uibutton の配列) からメソッドを呼び出しています。問題は、ボタンがすぐに変更UIControlStateSelectedされ、ボタンの新しい uiimage が表示されることです。画像が表示されますが、メソッドを実行した後にのみ表示されます。このメソッドは、一部のデータをダウンロードし、1 ~ 2 秒かかります。ユーザーは、メソッドが呼び出されてボタン画像の選択状態が画像を変更するまで、ボタンに触れたかどうかわからないことは明らかです。

ボタンの選択状態に使用しているコードは次のとおりです。

        [catBtn setTitle:[NSString stringWithFormat:@"Button %d", i] forState:UIControlStateNormal];
        [catBtn setImage:[UIImage imageNamed:[categoryBtnImages objectAtIndex:i]] forState:UIControlStateNormal];
        [catBtn setTitle:@"I'm selected" forState:UIControlStateSelected];

        [catBtn setImage:[UIImage imageNamed:[categoryBtnImagesSel objectAtIndex:i]] forState:UIControlStateSelected];
     //   NSLog(@"%@",[categoryBtnImagesSel objectAtIndex:i]);

        [catBtn addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchDown];

        [catButtonArray addObject:catBtn];

これを手伝ってくれてありがとう。

4

3 に答える 3

4

IBACTION部分的なコードのみが与えられた場合の最良の推測:

ボタンのIBACTIONメソッドで同期ダウンロードを実行している場合、UI はボタンを更新しません。非同期ダウンロード メソッドを使用してダウンロードを実行し、IBACTIONメソッドが完了してボタンが更新されるようにします。

このNSURLConnection方法sendAsynchronousRequestは、非同期ダウンロードを実行する簡単な方法です。

+ (void)sendAsynchronousRequest:(NSURLRequest *)request
  queue:(NSOperationQueue *)queue
  completionHandler:(void (^)(NSURLResponse*, NSData*, NSError*))handler
于 2013-02-24T12:28:38.733 に答える
3

インターフェイスはそのようにブロックされるべきではありません。ボタンが押されている間に何が起こっているのか疑問に思っているユーザーの不満を想像してみてください。押したかどうかを考えてみてください。1 秒か 2 秒かかる場合は、メイン スレッドの外で実行する必要があります。そうすれば、インターフェイスがフリーズせず、ユーザーは何が起こっているかをすぐに知ることができます。

何かをダウンロードしようとしている場合は、必ずNSURLConnection ドキュメント ページを見て、sendAsynchronousRequest:queue:completionHandler:メソッドを使用する必要があります。

于 2013-02-24T12:34:32.367 に答える
0

「読み込み」コードを別のメソッドに移動できます。

次に、アクション メソッド内からこの読み込みメソッドを呼び出します。

[self performSelector:@selector(loadingMethod) withObject:nil afterDelay:0.0];
于 2013-02-24T12:29:28.470 に答える