2015-11-01 12 views
7

entlassen wird Ich aktualisiere eine App, um universelle Storyboards zu verwenden. Ich habe einen Popover-Übergang zu einem neuen Viewcontroller erstellt, indem ich den Interface Builder benutzt habe, indem ich von einer Schaltfläche zu meinem neuen Viewcontroller gezogen bin und "Als Popover darstellen" als Art von Segment ausgewählt habe.Wie erkennen, wenn ein Popover in iOS 9

Wenn der Benutzer außerhalb des Popover drückt (ablehnen), muss ich im präsentierenden View-Controller benachrichtigt werden, damit ich seine Aktionen rückgängig machen kann. Wie kann ich das machen?

Normalerweise hätte ich das Popover manuell erstellt und meinen Viewcontroller zum Delegierten des Popover gemacht; Erlauben Sie mir, den popoverControllerDidDismissPopover Delegierten Rückruf zu verwenden. Allerdings ist dies in iOS9 veraltet und selbst wenn es nicht war, habe ich keine Ahnung, wo ich das Popover finden kann, damit ich seinen Delegaten auf meinen View-Controller setzen kann.

Antwort

9

Nicht sicher, welche Methode Sie als veraltet bezeichnen, aber Sie können immer noch die UIPopoverPresentationControllerDelegate verwenden, um dies zu erreichen. Etwas wie:

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 
    } 
} 

Und dann verwenden Sie die

func popoverPresentationControllerDidDismissPopover(popoverPresentationController: UIPopoverPresentationController) 

Methode seine Entlassung zu behandeln.

+2

Bedenken Sie, dass die didDississ-Funktion nur dann aufgerufen wird, wenn sich das Popover selbst ablehnt, z. B. eine Berührung außerhalb davon. Wenn Sie es selbst mit Ihrem eigenen Code ablehnen (z. B. durch Drücken einer Taste), wird es nicht aufgerufen. – CMash

4

Die popoverControllerDidDismissPopover: Methode wurde durch popoverPresentationControllerShouldDismissPopover: ersetzt, da UIPopoverControllerDelegate durch die UIPopoverPresentationControllerDelegate ersetzt wurde.

Von Ihren Presenting-View-Controller, auf das neue Protokoll entsprechen und die Delegierten für den Controller popover Präsentation gesetzt in 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 
    } 
} 

Anschließend können Sie die delegierte Methode verwenden Erfassung der Entlassung in der Art und Weise zu handhaben das hast du vorher beabsichtigt.