【问题标题】:Popovers in Storyboard, how to handle the delegate故事板中的弹出框,如何处理委托
【发布时间】:2015-04-24 17:07:37
【问题描述】:

在情节提要中,我有一个视图控制器,它与另一个视图控制器有一个segue,并应用了“作为弹出窗口呈现”。如果我不添加任何代码,这将按预期工作。

问题: 我需要让委托工作,以便我可以从弹出窗口取回数据。我已经在弹出窗口中创建了委托。

我已经添加了

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,但是当应该在弹出窗口中调用委托函数时,没有任何反应。

我做错了什么

谢谢

【问题讨论】:

    标签: swift delegates storyboard


    【解决方案1】:

    您必须在呈现 Popover 的类中实现 UIPopoverPresentationControllerDelegateUIPopoverPresentationControllerDelegate 协议的方法让您可以自定义基于弹出框的演示文稿的行为。

    如果你设置了一个转场去 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 被解除。

    希望对你有所帮助。

    【讨论】:

    • popOver.popoverPresentationController!.delegate = self 不起作用但是,如果我将其更改为 popOver.delegate=self 则它可以按预期工作。谢谢
    猜你喜欢
    • 1970-01-01
    • 2015-01-14
    • 2013-02-08
    • 2012-02-17
    • 1970-01-01
    • 1970-01-01
    • 2015-12-13
    • 2019-05-16
    相关资源
    最近更新 更多