1

誰かがナビゲーションバーのrightBarButtonItemをタップして、プログラムがクラッシュするのをすばやくもう一度タップすると、問題が発生します。新しいビューの読み込みがまだ完了しておらず、ボタンがまだ表示されているためにクラッシュするのは理解できます。そのため、ビューをもう一度押してプログラムをクラッシュさせようとします。私はこれを防ぐためにいくつかの方法を試しましたが、現在の実装はある程度機能しますが、より良い解決策、おそらくフレームワークに組み込まれた解決策があることを知っていますか?

- (void) loadView
{
    [super loadView];

    self.navigationItem.rightBarButtonItem = [[[UIBarButtonItem alloc]
                                               initWithTitle:@"Members" 
                                               style:UIBarButtonItemStylePlain 
                                               target:self 
                                               action:@selector(showRoster)] autorelease];
}


-(void) showRoster {
    if (seconds + 3 < [[NSDate date] timeIntervalSince1970]) { //This is where I am trying to prevent the button from being activated twice.
        seconds = [[NSDate date] timeIntervalSince1970];

        vcRoster = [[RosterDataViewController alloc] init];
        vcRoster.rosterDataModel.group_id = self.tweetsByGroupIdModel.group_id;
        [self.navigationController pushViewController:vcRoster animated:YES];
    }

}

私もこれを試しましたが、私が思っていることをしていません。

if (!self.navigationController.isBeingPresented)

私は問題を解決し、答えへの道をグーグルで調べようとしましたが、この問題に対する良い解決策をまだ見つけていません。私は上記が物事を行うための良い方法ではないことを知っています。私はIOSの世界に非常に慣れていないので、改善のための提案を受け入れることができます。助けてくれてありがとう。

4

2 に答える 2

6

アクションメソッドが実行されたらすぐにボタンを無効にしてみてください。

-(void) showRoster:(UIButton*)sender {
  sender.enabled = NO;
  ...
}

後で有効にして、再度応答できるようにすることができます。これを行う最善の方法は、表示しているビューによって異なります。全画面表示の場合は、ボタンを再度有効にするだけですviewDidAppear:(つまり、ビューが消えてボタンが再び表示された後)。

于 2013-01-22T19:58:54.300 に答える
0

UIViewControllerのisViewLoadedメソッドを使用して、ビューがロードされているかどうかを確認する必要があります。

if (self.navigationController.topViewController.isViewLoaded && seconds + 3 < [[NSDate date] timeIntervalSince1970]) {...} 
于 2013-01-22T20:09:45.813 に答える