2012-03-16 10 views
2

私は設定ポップオーバーを持っています。私はそのポップオーバーにボタン(詳細)を持っています。ユーザーがそのボタンをクリックすると、別のビューを表示したいので、そのポップオーバーを解除します。iOSでは、ポップオーバーを閉じる方法を教えてください。

実際にポップオーバーの内側にある[詳細]ボタンからこれを行うにはどうすればよいですか?私は、ボタンの押しを扱う機能を持っている

電流:

- (IBAction)showFullVersionInfo:(id)sender 
    { 
    [self dismissPopoverAnimated:YES]; 
    parent.settingsPopover = nil; 

    //need to show more Info... 

    } 

親はポップオーバーを参照「settingsPopover」を保持し、私はそれをクリアしたいです。

+0

あなたは問題を解決するように見えますあなたは別のビューを表示する方法を知りたいですか?ポップオーバーの外にあるどのUIに関連してこのビューを表示するか/どのようにしますか? – rickster

+0

@rickster上記のコードは、ポップオーバーを削除するためには機能しません...まだ動作させようとしています。 – milesmeow

答えて

4

これは、ポップオーバーコントローラの内部からは行いません。ポップオーバーコントローラは、ポップオーバーの表示/非表示の方法や時期ではなく、ポップオーバーの内容のみを管理する必要があります。

このような操作は、親コントローラでのみ実行できます。ポップオーバーを表示しているコントローラー(および所有しているコントローラー)からのみポップオーバーを非表示にします。

あなたの質問は、実際には:ユーザーがポップオーバー内で何らかのアクションを実行したことを親コントローラに伝える方法ですか?

答えは:代理人です。 デリゲートを定義し、親コントローラで実装し、ポップオーバーおよびIBActionコールデリゲートメソッドに渡します。

あなたが持っている必要がありますsettingsPopoverを起動する機能で、あなたの「親」オブジェクトで
0

ベストプラクティスは、popoverControllerDidDismissPopover:代理コールバックでポップオーバーを解放することです。残念ながら、このコールバックはdismissPopoverAnimated:の後にコールしません。私は、例えばpopoverDidFinishWorking:という別の統一コールバックを入力することでこれを解決しました。クローズボタンがタップされたときにポップオーバーからオーナーに送信します。オーナーがpopoverDidFinishWorking:を取得すると、popoverControllerDidDismissPopover:が呼び出され、popover(settingsPopover)が非表示になります。このコールバックに他のビューも表示できます。とにかくそれはあなたのアプリの設計に依存します。

+0

iOSでは未定義のものには注意が必要です。アプリはこれに基づいて拒否されます。 – mpemburn

+0

だから、私は幸運な男です。 Appは1年以上App5toreに成功しました。実際には「未定義のもの」ではなく、優れたAppデザインの一部です。 – SVGreg

0

:あなたはあなたの親クラスで前

-(void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated { 
    if (viewController == self && self.settingPopover != nil) { 

     //need to show more Info based on settingPopover info here 

      self.settingPopover = nil ; 
     } 
} 
をself.navigationController.delegate =自己を持っている必要があり

- (void) launchDismissSettingPopover { 
    if (settingPopover == nil) { 
     //Create an launch the popover 
    } else { 

     [self dismissPopoverAnimated:YES]; 
     // settingPopover will be nil in navigationController didShowViewController 
     //self.settingsPopover = nil; 
    } 
} 

あなたのポップオーバークラスメソッドで

- (IBAction)showFullVersionInfo:(id)sender 
    { 
    [parent launchDismissSettingPopover]; 
    } 
関連する問題