Segue Popover 无法正常运行

Posted

技术标签:

【中文标题】Segue Popover 无法正常运行【英文标题】:Segue Popover won't behave properly 【发布时间】:2012-01-13 02:46:25 【问题描述】:

我正在尝试使用 Segue 呈现然后关闭 Popover 视图并单击 UIBarButtonItem

我创建了一个通用的 Segue,它除了视图之外不锚定任何东西并为其命名

我已将 Interface Builder 中的 UIBarButtonItem 锚定到:

- (IBAction)clickedSettings:(id)sender 

    if(self.popSegue != nil) 
        [self.popSegue.popoverController dismissPopoverAnimated:YES];
     else 
        //Current says only a button may
        [self performSegueWithIdentifier:@"Settings" sender:sender];
    

但是当我单击按钮显示 Segue 时,它​​会给我一个错误:

由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“UIStoryboardPopoverSegue 必须从条形按钮项或视图呈现。”

它甚至没有击中我的-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender

我在堆栈上阅读了以下问题:

    ios:How to dismiss Popover UIBarButtonItem + popover segue creates multiple popovers

但我仍然得到同样的错误。对于我的生活,我无法弄清楚出了什么问题

【问题讨论】:

你找到解决方案了吗? 【参考方案1】:

我对此不以为然,因为我通过多个 *** 线程得到了它的每一点,但我得到了这个:

@interface MyViewController ()
- (IBAction) toggleSettingsInPopover: (id) sender;
@property (nonatomic, strong) UIStoryboardPopoverSegue *settingsPopoverSegue;
@end

@implementation MyViewController
@synthesize settingsPopoverSegue = _settingsPopoverSegue;

- (IBAction) toggleSettingsInPopover: (id) sender 
    if( [self.settingsPopoverSegue.popoverController isPopoverVisible] ) 
        [self.settingsPopoverSegue.popoverController dismissPopoverAnimated: YES];
        self.settingsPopoverSegue = nil;
     else 
        [self performSegueWithIdentifier: @"Settings" sender: sender];
    


- (void) prepareForSegue: (UIStoryboardSegue *) segue sender: (id) sender 
    if( [segue.identifier isEqualToString: @"Settings"] ) 
        if( [segue isKindOfClass: [UIStoryboardPopoverSegue class]] )
            self.settingsPopoverSegue = (UIStoryboardPopoverSegue *) segue;
        MySettingsViewController *msvc = segue.destinationViewController;
        msvc.delegate = self;
    

@end

在我的故事板中,我从我的设置栏按钮项控制拖动到MyViewController 并将其连接到toggleSettingsInPopover 操作。然后我从MyViewController控制拖动到设置视图以创建segue,将其类型设置为popover,将其标识符设置为Settings,将其方向设置为向上和向左(工具栏在底部屏幕和按钮位于右端),然后从其Anchor 拖动到我连接到操作的条形按钮项。

【讨论】:

好吧,我已经搜索了很多线程,您的回答绝对值得称赞! :-)【参考方案2】:

您必须通过 Ctrl 键将锚字段从 segue 属性检查器拖动到 UIBarButton,从而将 segue 锚定到 UIBarButton。

如果您以相反的方式执行此操作,则 Ctrl 键从按钮拖动到要显示的窗口,您将无法从 Popoverwindow 控制行为。

(重要的部分也在LavaSlider的回复最后一句)

【讨论】:

以上是关于Segue Popover 无法正常运行的主要内容,如果未能解决你的问题,请参考以下文章

从 popover segue 推送 segue 不起作用

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

从另一个 Popover 中关闭显示为 Popover segue 的 ViewController

我看不到popover segue

iOS 6 Storyboard Segue 风格 Popover 与 UIPopoverController 目标崩溃

在 iOS 9 上关闭由 segue 创建的 Popover