1

UIButtonの内部 IBAction を使用して [performSelector:@selector(reloadData) withObject:nil afterDelay:0.01]います。reloadData メソッドは、特定の方法でメイン ビューにいくつかのサブビューを描画します。問題は、ボタンをすばやく繰り返しタップすると、セレクター「ReloadData」が複数回実行され、イベントはキャンセルされますが、そのセレクターへの以前のすべてのリクエスト。これにより、メイン ビューのサブビューが重複します。

-(IBAction) myButtonIsTapped
{
     [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(reloadData) object:nil];

    [self performSelector:@selector(reloadData) withObject:nil afterDelay:0.01];

}

次のようにデータメソッドをリロードします。

-(void) reloadData
{
     @synchronized(self){
        // clear all subviews from the main view
        // draw new subviews
     }
}
4

2 に答える 2

3

これはどうですか:

-(IBAction) myButtonIsTapped
{
    [self.myButton setUserInteractionEnabled:NO];

    [self performSelector:@selector(reloadData) withObject:nil afterDelay:0.01];

}

-(void) reloadData
{
    // Long task...
    // Enable the button again:
    [self.myButton setUserInteractionEnabled:YES];

}

ユーザーが行ったことを論理的に処理するよりも、ユーザーが行っていること (UI) を制御する方が簡単な場合があります。

于 2013-02-14T10:21:20.263 に答える
0

1 つのことを作成して yesBOOL variableに設定し、viewdidloadyes の場合は関数をチェックインしてからメソッドを呼び出し、buttonmake メソッドで no にします。

于 2013-02-14T10:20:55.920 に答える