Swift: Popover dismiss callback

后端 未结 4 1605
太阳男子
太阳男子 2020-12-30 10:56

There are two UIViewConrollers in my Storyboard: MainViewController and SecondViewController. I\'m going to show S

4条回答
  •  孤城傲影
    2020-12-30 11:09

    Protocols and delegations are solution to such problems. In my case I defined a protocol and conformed the MainViewController to the protocol.

    //SecondViewController
    protocol MyDelegate{
        func DoSomething(text:String)
    }
    
    class SecondViewController: UIViewController {
    
     var delegate:GetTextDelegate?
    
     var inputTextDelegate:String = ""
    
     override func viewDidLoad() {
        newText.text = inputTextDelegate
     }
    
     @IBAction func dismissPopover(sender: UIButton) {
            dismissViewControllerAnimated(true, completion: nil)
           //This dismisses the popover but does not notify the  MainViewConroller
     }
     @IBAction func doneButtonAction(sender: UIButton) {
        if let delegate = self.delegate {
            delegate.DoSomething(newText.text)
            self.dismissViewControllerAnimated(true, completion: nil)
        }
     }
    }
    

    class MainViewController: UIViewController, UIPopoverPresentationControllerDelegate, MyDelegate {
    
    
        override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?)
        {
    
            if segue.identifier == "GoToSecondViewControllerSegue"
            {
                var vc = segue.destinationViewController as! SecondViewController
                vc.delegate = self
                vc.inputTextDelegate = "I'm a popover!"
            }
        }
    
        func popoverPresentationControllerDidDismissPopover(popoverPresentationController: UIPopoverPresentationController) {
            //...
        }
    
     func DoSomething(text: String) {
         //Do whatever you want
         println(text)
     }
    
    }
    

提交回复
热议问题