0

私のアプリケーションは一時的なメッセージを表示する必要があるため、Android のような Toast を自分で作成しました。トーストが1つだけの場合に適しています。メッセージを非表示にするために NSTimer を使用しています。複数のトーストを表示すると、タイマーが問題になります。最後に追加されたトーストのみが非表示になり、他のトーストは非表示になりません。すべてのトーストを非表示にするにはどうすればよいですか?

コード:

削除機能:

-(void)removeToast
{
 NSLog(@"removed");
 [self.view removeFromSuperview];
}

タイマー開始:

timer = [NSTimer scheduledTimerWithTimeInterval:(4.0f) 
                                         target:self  
                                       selector:@selector(xxxx)
                                       userInfo:nil repeats:NO];

これを上記の別NSObjectのクラスに記述し、オブジェクトを作成しました。2 つの NSTimer を同時に実行する方法、またはすべてを追跡する方法について明確にする必要がありますNSObjects

ビューコントローラーでのオブジェクト作成は @property(nonatomic,strong)Toast *toast;

4

1 に答える 1

1

目的のためにタイマーのインスタンスを ivar に保持する必要はありません。次のように、 userinfo: パラメータを使用して、タイマーが起動したときに非表示にするビューを渡します。

[NSTimer scheduledTimerWithTimeInterval:(4.0f) 
                                     target:self  
                                   selector:@selector(xxxx)
                                   userInfo:yourView repeats:NO];

次に、セレクターで userInfo からビューを取得し、非表示にします。動作するサンプルは、こちらの 37 行にあります。

于 2012-08-15T17:04:21.747 に答える