3

クライアントアプリケーションにはアイドルタイムアウト制御メカニズムがあり、ユーザーが指定された時間間隔でアプリを何もしなかった場合、警告を表示してログイン画面に戻します。この制御は、他のすべてのビューを開始するコンテナビューで行われます。アイドル時間が経過したら、このコンテナビューを呼び出し元、つまりログイン画面に表示します。

問題は、ユーザーがアクションシートまたはポップオーバーを表示するsthgを実行し、アイドル時間が経過するまで何もしない場合、ユーザーをログイン画面にスローすると、アクションシートとポップオーバーもログイン画面に残ります。私はそれらを却下しないので。

これを解決するために、すべてのアクションシートとポップオーバーにビューコントローラーのメンバーを保持させてから、所有者のviewWillDisappearメソッドでそれらを却下することを考えることができます。しかし、私は非常に多くのビューコントローラを持っているので、もしあれば、他の方法を探しています。

では、問題は、発信者が誰であるかを知らなくても、これらすべてのアクションシートとポップオーバーをログイン画面から削除するにはどうすればよいかということです。

4

2 に答える 2

2

UIPopoverインスタンスを登録して、通知をリッスンします。

[[NSNotificationCenter defaultCenter] addObserver:_myPopOver 
                                         selector:@selector(myDismissPopover)
                                             name:@"dismissPopover" 
                                           object:nil];

そして、UIPopoverクラスに拡張機能を追加します。

- (void) myDismissPopover {
 [self dismissPopoverAnimated:YES];
}

ポップオーバーを却下する必要がある場合は、通知を投稿するだけです。

[[NSNotificationCenter defaultCenter] postNotificationName:@"dismissPopover" 
                                                    object:nil];
于 2011-11-18T23:38:58.857 に答える
1

質問のコメントでbshirleyと話し合ったので、私は自分の解決策を書き留めます。問題を解決するために、次のようなメカニズムを実装しました。

ログインビューコントローラーで、却下されるすべてのアクションシートとポップオーバーコントローラーを保持するNSMutableArrayを作成します。次に、この配列をグローバルディクショナリに格納します。ユーティリティメソッドを介してこの辞書にアクセスします。次に、アプリケーション全体で、アクションシートまたはポップオーバーコントローラーを作成する人は誰でも、この配列にコンポーネントを追加します(グローバルデータから配列を取得し、変更してから、グローバルデータに保存します)。次に、ユーザーがログイン画面に戻ると、ログインビューコントローラーのviewWillDisappearで、この配列をループし、配列から取得したUIViewがアクションシートかポップオーバーコントローラーかを確認して、適切なdismissメソッドを呼び出します。次に、この配列のすべての要素を削除して、グローバルデータに再度保存します。

これが同様のメカニズムを実装する必要がある人に役立つことを願っています。コメントをいただければ幸いです。

于 2011-07-16T16:01:03.903 に答える