2017-05-01 3 views
0

Ich arbeite mit Xcode 8 und Swift 3. Ich habe einen Viewcontroller (Class User: NSViewcontroller) mit einer Schaltfläche. Diese Taste hat eine Aktion:Popover schließen von einer anderen Ansicht Controller Swift 3

@IBAction func btnAction(_ sender: Any) { 

    let popover = NSPopover() 
    popover.contentViewController = NSStoryboard(name: "Main", bundle: nil).instantiateController(withIdentifier: "Popover") as! NSViewController 

    popover.show(relativeTo: button.bunds , of: button, preferredEdge: .maxX) 
} 

Mit dieser Taste öffnen Sie eine andere Ansicht-Controller als popover. Dieser Popover-View-Controller (Klassen-Popover: NSViewController) führt einige Aktionen aus.

Jetzt ist meine Frage: Wie kann ich den Popover-Viewcontroller aus der Popover-Klasse schließen?

+0

Sie können wahrscheinlich auf diese http://stackoverflow.com/questions/28224059/dismiss-popover-after-touch –

Antwort

0

Nicht sicher über den obigen Code, aber um Ihre PopoverView zu erstellen und zu entlassen. Hier sind die Schritte: -

1) Erstellen Sie einen neuen Namen View Controller als PopOverViewController.swift

2) Implementieren Sie die folgenden Verfahren im Inneren, dass: -

func updatePopOverViewController(_ button: UIButton?, with delegate: AnyObject?) { 

    guard let button = button else { return } 

    modalPresentationStyle = .popover 

    popoverPresentationController?.permittedArrowDirections = [.up] 

    popoverPresentationController?.backgroundColor = view.backgroundColor 

    popoverPresentationController?.sourceView = button 

    popoverPresentationController?.sourceRect = button.bounds 

    popoverPresentationController?.delegate = OtherViewControllerClass 
} 

3) In Ihrem OtherViewControllerClass die Umsetzung folgender Code: -

extension OtherViewControllerClass: UIPopoverPresentationControllerDelegate { 

func adaptivePresentationStyle(for controller: UIPresentationController) -> UIModalPresentationStyle { 

    return UIModalPresentationStyle.none 
} 


func popoverPresentationControllerDidDismissPopover(_ popoverPresentationController: UIPopoverPresentationController) { 
    //your code for eg. if you want to change the tint color of our button 
} 

//When you tap on button it will show the popover and while tapping on yourViewcontroller view it will dismiss the popover accordingly. 
@IBAction func buttonClicked(_ sender: UIButton) { 

    let viewController = PopOverViewController() 

    viewController.updatePopOverViewController(sender, with: self) 

    present(viewController, animated: true, completion: nil) 
    } 
} 
+0

verweisen, danke für Ihre Antworten. aber nichts funktioniert - vielleicht mache ich es falsch. Ich habe mein Demo-Projekt angehängt. Kann mir jemand zeigen, wie es realisiert werden kann? https://www.file-upload.net/download-12475831/PopOver.zip.html – Stack108

0

Nun könnte ich total sein rate hier, da ich keine Ahnung, wie Sie Ihren Viewcontroller geschrieben wird, aber dies ziemlich sollte

self.presentedViewController?.dismiss(animated: true, completion: nil) 

Die grundlegende Sache hier arbeiten ist, dass Sie die VC zugreifen können, die die popover vorgelegt und dann über sie entlassen nennen.

Verwandte Themen