2011-07-14 10 views
3

私のクライアントアプリケーションでは、私はアイドルタイムアウト制御メカニズムを持っています。ログイン画面に戻ります。このコントロールはコンテナビューで行われ、他のすべてのビューが開始されます。アイドル時間が経過すると、このコンテナビューを呼び出し元、つまりログイン画面にポップします。UIActionSheetsとUIPopoverControllerを解雇する方法

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

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

質問:どのようにこれらのアクションシートとポップオーバーを自分の発信者が誰なのかわからずにログイン画面から外すことができますか?

+1

さらに重要なことに、「誰」が誰であるかを知る必要があります。そのような場合には、表示するためのメカニズムを集中化する必要があります。 – bshirley

+0

ええ、確かに。だから私はそれらをプレゼンターのメンバー変数に変える予定です。それらをすべてグローバルな配列に追加し、それらを却下しても配列からそれらを削除するような仕組みを実装することは良い考えですか? – aslisabanci

+0

これは実現可能な解決策であると思われます。また、一度に1つのポップオーバーを画面に表示するのが最も良い方法です(今でも問題がある場合) – bshirley

答えて

1

質問のコメントに私がbshirleyと話したように私は私自身の解決策を書きます。 私はこの問題を解決するためのメカニズムを実装しました:

私のログインビューコントローラでは、すべてのアクションシートとポップオーバーコントローラを保持するNSMutableArrayを作成します。次に、この配列をグローバル辞書に格納します。私はこの辞書にユーティリティメソッドでアクセスします。その後、アクションシートまたはポップオーバーコントローラを作成したアプリケーションのすべてが、この配列にコンポーネントを追加します(グローバルデータから配列を取り出し、変更してグローバルデータに戻します)。その後、ユーザーがログイン画面に戻ったとき、私のログインビューコントローラのviewWillDisappearに、この配列をループし、配列から取得するUIViewがアクションシートかポップオーバーコントローラかどうかをチェックして、適切な解除メソッドを呼び出します。次に、この配列のすべての要素を削除してから、グローバルデータに再度格納します。

これは、これと同様の仕組みを実装する必要がある人に役立ちます。あなたのコメントは高く評価されます。

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]; 
関連する問題