2012-03-26 3 views
26

あなたはポップオーバーを却下する場合 - たとえば、あなたが必要ポップオーバーのcontentViewController内のボタンから -contentViewController内からUIPopoverControllerを終了しますか?

  1. それ
  2. が作成作成ビューコントローラで開催されるポップオーバーへの参照を作成します。所有するビューコントローラを聞かせするcontentViewControllerからの通知は、それが却下されるべきであることを知っている、または交互に同じ目的
  3. のためのデリゲートを作成するポップオーバーが
  4. コールdismissPopover:animated棄却する準備ができたときに通知またはデリゲートメッセージを送りますノートンまたはデリゲートメソッドを使用すると、モーダルビューコントローラ、親ビューコントローラ、ナビゲーションコントローラ、スプリットビューコントローラ、タブバーコントローラ、検索ディスプレイコントローラ、アクセスすることができUIViewControllerから、一方

と呼ばれています子ビューコントローラ、プレゼンテーションビューコントローラ、提示されたビューコントローラを含む。

popoverのcontentViewControllerからこれを行う方がよいでしょうか?

答えて

29

残念ながら、上記のUIPopoverControllerに弱いプロパティリファレンスを作成する必要があります。なぜなら、コンテンツビューコントローラ内からアクセスする方法がないからです。

私は、UIViewControllerがモーダルビューコントローラ、親ビューコントローラ、ナビゲーションコントローラ、分割ビューコントローラ、タブバーコントローラ、検索ディスプレイコントローラ、およびiOS 5の時点で子ビューコントローラプレゼンテーションとプレゼンテーションを行うコントローラーは、ポップオーバーコントローラーではありません(ポップオーバーはUIViewControllerではありませんが、それでもなお許可されています)。

技術的には、UIViewControllerがあるpopoverControllerを取得するための非公開の、文書化されていないメソッドがあります。なぜ私はそれらがパブリックになっていないのかわかりません。

文書化されていない私的な世界でさえ、dismissModalViewcontrollerAnimated:に相当するものはありません。あなたはまだその参照を取得し、そのように却下する必要があります。

+1

ドキュメントを検索した後、私はこれにも驚きました。残念ながら、これは望ましくない依存関係を追加します。 – Maurizio

+0

iOS8では、ここで選択することができます:self.popoverPresentationController – Jacky

1

-(void)closePopoverIfNecessary:(NSNotification*)notificationなどのメソッドにNSNotificationオブザーバを追加し、子クラスにオプションでそのポップオーバーを閉じるメソッドを実装させる抽象ビューコントローラ(すべてのビューコントローラ用)を作成することもできます。開いた。その後、ポップオーバーのコントローラ内から、通知を閉じて閉じるようにします。必要に応じて通知(userInfo)を介して他の情報を渡すこともできます。

このようにして、親参照は不要です。

+0

これは抽象コントローラの 'dealloc'でオブザーバを削除することを忘れないでください –

関連する問題