在附加的视图控制器中关闭 Popover segue

Posted

技术标签:

【中文标题】在附加的视图控制器中关闭 Popover segue【英文标题】:Dismiss Popover segue in the attached viewcontroller 【发布时间】:2014-09-13 00:51:13 【问题描述】:

我有一个带有 UIViewController 的故事板,名为 EntryViewController,它使用弹出框转接另一个名为 PopoverViewControllerUIViewController。在这方面一切正常,但在我的PopoverViewController 中,我创建了一个UIButton 来关闭弹出框,但无论我做什么,我都无法让它工作,所有在线教程都显示用户以编程方式创建了弹出框。

我尝试了以下方法:

- (IBAction)dismissPopover:(id)sender 
  [self dismissViewControllerAnimated:YES completion:nil];
  //[self.parentViewController dismissViewControllerAnimated:YES completion:nil];

关于如何解决这个问题的任何建议还是我做错了?

【问题讨论】:

您是否尝试过在“dismissPopover”中进行 NSLog 或调试,以确保您的 UIButton 点击​​事件触发了这个? 是的,dismissPopover 正在执行。我已经用 NSLog 验证过了。 如果有人需要更多信息来帮助调试,我可以为您提供所需的任何信息。 【参考方案1】:

您可以通过点击弹出框之外的区域来关闭弹出框。在您的 PopoverViewController 中定义一个属性,该属性包含对 segue 的 popOverController 的引用。在根控制器的 prepareForSegue 方法中,设置上述属性。然后您可以使用该属性来关闭 PopoverViewController。

在您的 PopoverViewController.h 文件中定义一个属性:

@property (nonatomic, strong) UIPopoverController *popOverController;

- (IBAction)dismissPopover:(id)sender 
   [self.popOverController dismissPopoverAnimated:YES];

在您的 EntryViewController 的 prepareForSegue 方法中:

- (void) prepareForSegue: (UIStoryboardSegue *) segue sender: (id) sender 
    if([segue.identifier isEqualToString: @"ShowPopOver"]) 
        if( [segue isKindOfClass: [UIStoryboardPopoverSegue class]] )
        PopOverViewController *controller = (PopOverViewController*)segue.destinationViewController;
        controller.popOverController = [(UIStoryboardPopoverSegue *)segue popoverController];
    

您也可以下载sample example

【讨论】:

以上是关于在附加的视图控制器中关闭 Popover segue的主要内容,如果未能解决你的问题,请参考以下文章

firebase 在 Swift 中关闭重载表?

无法在 Interface Builder 中关闭键盘,因为视图控制器不会显示 doneEditing:

iOS 应用程序在 swift 中关闭视图后冻结

使 popover segue 的 View Controller 保持持久(仅分配一个实例)

在 SWIFT 中关闭 segue 之前保存变量

没有锚的popover segue,MKMapView