2013-03-04 58 views
2

一個可以編程方式創建UIPopoverController然後設置其的viewController,passthough意見等:獲取參考UIPopoverController W /塞格斯

- (IBAction)showCustomPopoverButtonHandler:(id)sender { 
    if (self.colorPicker == nil) { 
     self.colorPicker = [[ColorPickerTableViewController alloc] initWithStyle:UITableViewStylePlain]; 
     _colorPicker.delegate = self; 
     self.colorPickerPopover = [[UIPopoverController alloc] initWithContentViewController:_colorPicker]; 
    } 


    [self.colorPickerPopover setPassthroughViews:@[self.containerView]]; 
    [self.colorPickerPopover presentPopoverFromRect:self.showCustomPopoverButton.frame 
              inView:self.view 
          permittedArrowDirections:UIPopoverArrowDirectionRight 
              animated:YES]; 
} 

不過,我想利用故事板/ seques。如果採取這種做法,我不知道如何獲取到UIPopoverController實例的綱領性參考:

enter image description here

任何人都知道如何做到這一點?我希望像

UIPopoverController* pvc = self.popoverController; 

我還列舉了childViewControllers要檢查他們的類類型:

// Get references to child view controllers. 
    for(NSUInteger index = 0; index < self.childViewControllers.count; index++){ 
     id obj = self.childViewControllers[index]; 
     if([obj isKindOfClass:[UIPopoverController class]]){ 
      self.menuPopoverController = self.childViewControllers[index]; 
     } 
    } 
+0

對不起,我遲到了閱讀你的問題,但我很高興你找到了答案。在segue和storyboard中實現popover的一個優點是你不必編寫代碼來解僱它。彈出窗口會自動解除。另外,錨定的視圖用一個簡單的ctrl-拖動來設置。 – 2013-03-04 18:51:19

+0

錨點視圖不能總是像這樣設置。例如,我有兩個容器視圖,並希望將錨點設置爲其中一個容器視圖內的控件。但是大多數情況下可以這樣設置。 – VaporwareWolf 2013-03-04 19:18:38

回答

4
在蘋果文檔

找到答案:UIStoryboardPopoverSegue Class Ref

我鑄造的SEGUE在prepareForSegue ,並將強iVar設置爲像這樣的popoverController屬性:

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{ 
    if([segue.identifier isEqualToString:YOUR_SEGUE_IDENTIFIER]){ 
     // Typical delegate setup..... 
     UIStoryboardPopoverSegue* ps = (UIStoryboardPopoverSegue*)segue; 
     self.popoverController = ps.popoverController; 
     [self.popoverController setPassthroughViews:/* array of views */]; 
    } 
} 

工程就像一個魅力。

或者您可以使用它像這樣(在相同的方法)

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{ 
    if([segue isKindOfClass:[UIStoryboardPopoverSegue class]]){ 
     self.menuPopoverController = ((UIStoryboardPopoverSegue*)segue).popoverController; 
    } 
} 
+0

您還可以使用'[self.popverController setSetContentSizeForViewInPopover:CGSizeMake(600,600)];''來設置prepareForSegue中popover的大小。您也不需要強烈的參考,因爲segue會爲您保留視圖。 – 2013-03-04 18:54:15