2012-01-13 77 views
0

我正尝试使用Segue来呈现然后关闭Popover视图UIBarButtonItem被点击。Segue Popover将无法正常运行

我已经创建了一个不固定到任何东西,但鉴于通用Segue公司,并赋予它一个名称

我挂靠的UIBarButtonItem在Interface Builder中:

- (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

我读过关于堆栈中的下列问题:

  1. iOS:How to dismiss Popover
  2. UIBarButtonItem + popover segue creates multiple popovers

,但我仍然会得到相同的错误。对于我的生活,我想不出什么错误

+0

没有ü找到一个解决方案? – iosMentalist 2013-12-06 07:16:53

回答

3

我采取任何信贷这一点,因为我得到了它的每一位从通过多线程的StackOverflow去,但我得到这个工作有:

@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拖动到连接到动作的条形按钮项目I.

+0

好吧,我已经搜遍了很多主题,你的答案绝对值得信赖! :-) – Abdo 2013-02-01 12:10:46

2

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

如果以相反的方式执行Ctrl-从Button按钮拖到窗口中,您将无法控制Popoverwindow中的行为。

(最重要的部分也是LavaSlider答复的最后一句)