2

複数のポップオーバーを表示できるビューコントローラーがあります。同時にではありません。でどのポップオーバーが閉じられているかを知る最良の方法はどれpopoverControllerDidDismissPopoverですか?

閉じられているポップオーバーに関して、さまざまなアクションを実行する必要があります。

どうもありがとう

4

3 に答える 3

4

このようなものがうまくいくはずです。(このコードは完全ではありません。基本的なメモリやクラス管理などはご存知だと思いますので、実際の問題に焦点を当てます)

クラスでは、作成した popovercontrollers への参照を保存するためにいくつかの ivar を保持します

@interface MyClass : NSObject <UIPopoverControllerDelegate> {
    UIPopoverController *popover1;
    UIPopoverComtroller *popover2;
}

いつものように popovercontrollers を初期化し、それぞれへの参照を popover1 と popover2 に保存します。

次に、UIPopoverDelegate プロトコルの実装で:

- (void)popoverControllerDidDismissPopover:(UIPopoverController *)popoverController {
    if(popoverController == popover1) {
        //popover1 was dismissed
    } else if (popoverController == popover2) {
        //popover2 was dismissed
    }
}

編集: コメントを見ると、popovercontroller を 1 つだけ使用し、そのコンテンツ ビューを別の UIViewControllers に置き換えていることを意味しているようです。

この場合、アプリケーションの状態に影響を与えるような方法で、特定の UIViewController 内にあるアクションを実行することをお勧めします。

次に、ポップオーバーが閉じられたら、元のビューを新しく更新された状態で再読み込みします。

または、代わりに UIPopoverController の 2 つの異なるインスタンスを使用するように変更します。

于 2012-04-18T10:57:37.773 に答える
3

これは、Xcode 6.3 beta 3 の Swift で、Objective-Cでも同様である必要がある方法です。

  1. 提示されたビューにはViewController、それ自体が含まれている必要があります。

     import UIKit
    
     class MenuBookmarksViewController: UITableViewController  {
     }
    
  2. UIViewControllerクラスに拡張機能を追加するか、ポップオーバーを表示する内にコード (以下)UIViewControllerを配置します。

    extension UIViewController: UIPopoverPresentationControllerDelegate {
      public func popoverPresentationControllerDidDismissPopover(popoverPresentationController: UIPopoverPresentationController) {
           if popoverPresentationController.presentedViewController as? MenuBookmarksViewController != nil {
              ///do your stuff
           }
      }
    }
    
于 2015-04-08T21:06:22.293 に答える
1

で閉じられるポップオーバーが渡されpopoverControllerDidDismissPopover:ます。それを使用して、それぞれの場合に何をしたいかを決定します。

おそらく、UIPopoverControllerインスタンスを提示するオブジェクトの ivar としてインスタンスを保存し、デリゲート メソッドで渡された値と比較するだけで済みます。

于 2012-04-18T10:15:43.443 に答える