Swift: Popover schließen callback
Gibt es zwei UIViewConrollers in meinem Storyboard: MainViewController und SecondViewController. Ich zeige SecondViewController als popover, wenn der Benutzer auf eine Schaltfläche tippt, genannt Zeigen Popover:
//MainViewController
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?)
{
if segue.identifier == "GoToSecondViewControllerSegue"
{
var vc = segue.destinationViewController as! SecondViewController
var controller = vc.popoverPresentationController
if controller != nil
{
controller?.delegate = self
vc.inputTextDelegate = "I'm a popover!"
}
}
}
func popoverPresentationControllerDidDismissPopover(popoverPresentationController: UIPopoverPresentationController) {
println("done")
}
func adaptivePresentationStyleForPresentationController(controller: UIPresentationController) -> UIModalPresentationStyle
{
return .None
}
//SecondViewController
@IBAction func dismissPopover(sender: UIButton) {
dismissViewControllerAnimated(true, completion: nil)
//This dismisses the popover but does not notify the MainViewConroller
}
Den Anker segue verbunden ist, um eine Schaltfläche:
Nun habe ich zwei Probleme:
-
Wenn ich Tippen Sie auf die Abbrechen-Schaltfläche innerhalb des popover er entlässt die popover aber nicht auslösen
popoverPresentationControllerDidDismissPopover
innerhalb der MainViewController -
Wie kann ich die übergabe von Daten aus der SecondViewController der MainViewController, text Wert einer UITextView zum Beispiel.
InformationsquelleAutor Maysam | 2015-08-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
Oder, mehr einfach, rufen Sie einfach an iOS die delegate-Methode manuell, wenn Sie schließen Sie das popover manuell.
Einfachste Lösung, wenn Sie tun fast alles programmgesteuert
Einfache one-liner, der funktioniert wie erwartet. Vielen Dank Lukas!
InformationsquelleAutor Luke Bartolomeo
Protokolle und Delegationen sind die Lösung für solche Probleme. In meinem Fall habe ich definiert ein Protokoll und entsprach der MainViewController des Protokolls.
InformationsquelleAutor Maysam
Müssen Sie sich als popOverDeleagate. Die Diese Sie zu tun haben, die popOverPresentationController der destination.
Dann erklären, implementieren die Delegierten in Ihrer viewController
}
InformationsquelleAutor doozMen
Ich habe das gleiche problem und finde die Antwort in Apple-API.
Über die Funktion
popoverPresentationControllerDidDismissPopover
Sie sagenThe popover presentation controller calls this method after dismissing the popover to let you know that it is no longer onscreen. The presentation controller calls this method only in response to user actions. It does not call this method if you dismiss the popover programmatically.
Also haben wir es selbst zu tun.
Können Sie die Wahl eines Blocks oder eines Delegierten, wie @Maysam hat, die ist schwerer.
Hier ist mein Weg, um einen block zur info.
Lasst uns einfach konzentrieren auf die wichtigsten Funktionen.
Machte ich einen block, und nennen es gut secondVC deinit.
Legen Sie den block in prepareForSegue: Methode-und Fertig.
InformationsquelleAutor Jerome