7

ユニバーサルストーリーボードを使用するようにアプリを更新しています。私はボタンから新しいViewControllerにドラッグし、Segueの種類として 'Present As Popover'を選択することで、インターフェースビルダーを使用して新しいViewControllerにポップオーバーセグを作成しました。iOS 9でポップオーバーが解除されたときを検出する方法

ユーザーがポップオーバーの外に出たとき(表示を消したとき)、プレゼンテーションビューコントローラで通知を受ける必要がありますので、その操作を元に戻すことができます。これどうやってするの?

通常、私は手動でポップオーバーを作成し、viewcontrollerをポップオーバーの代理人にしました。 popoverControllerDidDismissPopoverデリゲートコールバックを使用することができます。しかし、これはiOS9では廃止されましたが、そうでない場合でもポップオーバーを見つける場所がわからないので、デリゲートをビューコントローラに設定できます。

答えて

9

あなたが推奨していない方法はありませんが、これを達成するためにはまだUIPopoverPresentationControllerDelegateを使用できます。何かのように:その後、

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    if segue.identifier == "popoverSegue" { 
     let vc = segue.destinationViewController 
     sortVC.modalPresentationStyle = .Popover 
     sortVC.popoverPresentationController?.sourceRect = filterButton.bounds 
     sortVC.preferredContentSize = CGSizeMake(216, 150) 
     sortVC.popoverPresentationController!.delegate = self 
    } 
} 

とその解雇を処理するため

func popoverPresentationControllerDidDismissPopover(popoverPresentationController: UIPopoverPresentationController) 

メソッドを使用します。

+2

didDismiss関数は、ポップオーバーがそれ自体の外に触れるなど、自分自身を閉じたときにのみ呼び出されることに注意してください。あなた自身のコード(例えば、ボタンを押すなど)で自分自身を却下した場合、それは呼び出されません。 – CMash

4

UIPopoverPresentationControllerDelegateに置き換えられているため、メソッドがpopoverPresentationControllerShouldDismissPopover:に置き換えられました。あなたの提示ビューコントローラから

、新しいプロトコルに準拠し、prepareForSegue:でポップオーバーのプレゼンテーションコントローラ用のデリゲートを設定します。

class MyPresentingViewController: UIViewController, UIPopoverPresentationControllerDelegate { 

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {   
     if let popoverPresentationController = segue.destinationViewController.popoverPresentationController { 
      popoverPresentationController.delegate = self 
     } 
    } 

    func popoverPresentationControllerShouldDismissPopover(popoverPresentationController: UIPopoverPresentationController) -> Bool { 
     return true 
    } 
} 

あなたは、その後の方法で解雇の検出を処理するデリゲートメソッドを使用することができますあなたが以前に意図していたこと。

関連する問題