2011-01-02 3 views
9

ユニバーサルiPadアプリにはいくつかのuiPopoverControllerがあります。特定のポップオーバーが解消されたら、関数をトリガーする必要があります。ユーザーがポップオーバー内で「閉じる」をクリックすると簡単にこれを行うことができますが、ポップオーバーを隠すために画面に触れると機能が起動しません。ipadは、UIPopoverControllerが解読されたときに検出します。

私はしばらくの間グーグルをしていましたが、メインビューコントローラでキャプチャするために使用できる代理人メソッドを見つけることができないようです。 didDismissPopoverControllerのようなものが大好きですが、私の推測では利用できません。

私がしなければならないのは、タッチを検出してトリガーすることだけでしょうか?基本的に私はUITableView行をハイライト表示し、ポップオーバーをロードしています。行の選択を解除する必要があります。単に[table reloaddata]を呼び出すだけです。

ありがとうございました!

答えて

21

UIPopoverControllerに代理人を割り当ててから- (void)popoverControllerDidDismissPopover:(UIPopoverController *)popoverControllerメソッドを実装する必要があります。たとえば:

- (void)popoverControllerDidDismissPopover:(UIPopoverController *)popoverController { 
    // do something now that it's been dismissed 
} 

:あなたは次にUIPopoverController(たとえば、この例では、FooController中)...

UIPopoverController *popover = // ... 
popover.delegate = self; 

をインスタンス化するとき

@interface FooController : UIViewController <UIPopoverControllerDelegate> { 
    // ... 
} 
// ... 
@end 

は、あなたがメソッドを実装します確かに、私はこれをテストしていないが、うまくいくはずだ...

希望これは役に立ちます!

4

次の割り当ての後にpopoverControllerDidDismissPopoverデリゲートメソッドを使用できます。 self.popoverController.delegate = self;

[self.popoverController dismissPopoverAnimated:YES]をプログラムで呼び出すと、popoverControllerDidDismissPopoverデリゲートメソッドが呼び出されないことに注意してください。

+0

これは本当です。ドキュメントを参照してください。 'popoverコントローラは、dismissPopoverAnimated:メソッドへのプログラム呼び出しに応答してこのメ​​ソッドを呼び出しません。プログラムによってポップオーバーを解除する場合は、dismissPopoverAnimated:メソッドを呼び出した直後にクリーンアップアクションを実行する必要があります。 –

関連する問題