2012-01-13 31 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答覆的最後一句)