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 中关闭显示为 Popover segue 的 ViewController
iOS 6 Storyboard Segue 风格 Popover 与 UIPopoverController 目标崩溃