故事板中的弹出窗口,如何处理委托

时间:2015-04-24 17:07:37

标签: swift delegates storyboard

在故事板中,我有一个视图控制器,它有一个segue到另一个viewcontroller,应用了“Present As Popover”。如果我不添加任何代码,这将作为id期望。

问题: 我需要让代表工作,这样我才能从popover中获取数据。我在popover中创建了委托。

我添加了

class LoginView: UIViewController,UIPopoverPresentationControllerDelegate, UIPopoverControllerDelegate,KeypadDelegate

我已将这些功能添加到主视图控制器中。

我遇到的问题是如何在segue上设置委托。

我试过了

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        if segue.identifier == "KeyPadLoad"
        {
            let popoverViewController = segue.destinationViewController as! UIViewController
            popoverViewController.modalPresentationStyle = UIModalPresentationStyle.Popover
            popoverViewController.popoverPresentationController!.delegate = self
        }
    }

segue被称为KeyPadLoad,但是当在popover中调用委托函数时,没有任何事情发生。

我做错了什么

由于

1 个答案:

答案 0 :(得分:3)

您必须在呈现Popover的类中实现UIPopoverPresentationControllerDelegateUIPopoverPresentationControllerDelegate协议的方法允许您自定义基于popover的演示文稿的行为。

如果您设置了一个segue转到Popover并将segue设置为Present as Popover,那么您的类必须是这样的:

class ViewController: UIViewController, UIPopoverPresentationControllerDelegate {

   override func viewDidLoad() {
      super.viewDidLoad()
      // Do any additional setup after loading the view, typically from a nib.
   }

   override func didReceiveMemoryWarning() {
      super.didReceiveMemoryWarning()
      // Dispose of any resources that can be recreated.
   }

   override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {

       var popOver = segue.destinationViewController as! PopOverViewController
       popOver.popoverPresentationController!.delegate = self        
   }

   // Tells the delegate that the popover was dismissed.  
   func popoverPresentationControllerDidDismissPopover(popoverPresentationController: UIPopoverPresentationController) {
       println("dismissed")
   }
}

PopOverViewController只是一个处理Popover的UIViewController,不再是这样的代码:

class PopOverViewController: UIViewController {

   override func viewDidLoad() {
      super.viewDidLoad()

      // Do any additional setup after loading the view.
   }

   override func didReceiveMemoryWarning() {
      super.didReceiveMemoryWarning()
      // Dispose of any resources that can be recreated.
   }
 }

使用上面的代码,您应该看到消息:

dismissed

每次PopOverViewController被解雇。

我希望这对你有所帮助。