Storyboard: Dismissing Popover using delegate/protocol method

守給你的承諾、 提交于 2019-12-03 02:47:14

When linking to a popover controller from a storyboard segue, the popoverController property of the segue refers to a standard UIPopoverController. This controller itself has a property, contentViewController, which will represent the view controller that is actually being presented within the popover, in your case the PopViewController.

So, your current code is setting itself as the delegate of the popover controller, when it really needs to be setting itself as the delegate of the popover's content view controller.

You still need to keep a reference to the popover controller around, to dismiss, so keep your existing code, but make the following change:

-(void)prepareForSegue:(UIStoryboardPopoverSegue *)segue sender:(id)sender
{
    if ([[segue identifier] isEqualToString:@"popoverSegue"])
    {
        popover = [(UIStoryboardPopoverSegue *)segue popoverController];
        // Get a reference to the content view controller of the popover
        PopViewController *popVC = (PopViewController*)popover.contentViewController;
        // Set ourselves as the content VC's delegate
        popVC.delegate = self;
    }
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!