2015-11-01 73 views
7

我正在更新應用以使用通用故事板。我使用界面生成器,通過將按鈕拖動到新的視圖控制器並選擇「Present As Popover」作爲segue的種類,從而爲一個新的viewcontroller創建了一個popover segue。如何檢測iOS 9中的彈出時間是否已被解除9

當用戶按下彈出窗口(解除它)時,我需要在呈現視圖控制器中收到通知,以便我可以撤消其操作。我怎樣才能做到這一點?

通常我會手動創建popover,並使viewcontroller成爲popover的代表;允許我使用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函數僅在popover解散時自動調用,例如它在外面觸摸。如果你自己用自己的代碼解僱它(例如從一個按鈕按下),那麼它將不會被調用。 – CMash

4

popoverControllerDidDismissPopover:方法已被替換爲popoverPresentationControllerShouldDismissPopover:,因爲UIPopoverControllerDelegate已被UIPopoverPresentationControllerDelegate取代。

從您呈現視圖控制器,符合新的協議,併爲酥料餅的顯示控制器的代表在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 
    } 
} 

然後,您可以使用委託方法來處理的方式解僱的檢測你以前想要的。

相關問題