使用情节提要中的标识符以编程方式设置 popover segue

Setting popover segue programmatically using identifier from storyboard

关于弹出窗口,我有一个稍微独特的情况。我刚刚添加完第三个导航项 (UIBarButtonItem),我必须以编程方式创建它,因为故事板只允许两个导航项。这个新按钮目前使用我在情节提要中设置的标识符连接到视图控制器。一切都按原样工作,但我需要继续弹出而不是推送。由于此按钮是在代码中创建的,因此我无法在故事板中设置弹出窗口的锚点。有没有办法在情节提要中将 segue 类型设置为 popover 并使用标识符以编程方式设置其锚点?还是弹出窗口必须完全用代码完成?下面是我对新按钮和当前 segue 的了解。

按钮初始化
self.categoryButtonItem = [[UIBarButtonItem alloc]initWithTitle:NSLocalizedString(@"Cat", @"categories button")   style:UIBarButtonItemStyleDone target:self action:@selector(categoryButtonDidPress:)];
self.navigationItem.rightBarButtonItems = [self.navigationItem.rightBarButtonItems arrayByAddingObject:self.categoryButtonItem];
当前 Segue 设置为 Push in storyboard。
-(void) categoryButtonDidPress:(UIBarButtonItem *)sender {
    [self performSegueWithIdentifier:@"categorySegue" sender:nil];
}

下面的代码显示了如何根据上面提供的限制在您的应用中包含弹出窗口。此功能与 iPhone 不兼容。它可能与 iPhone 6 Plus 兼容(考虑到它的拆分视图功能)。在 xcode6 中,视图控制器标识符已被删除并替换为 Storyboard ID(可能在更高版本中)。这在使用标识符实例化视图控制器时很重要,并确保为 UIPopOverController 创建一个 属性。请记住,这只是任何新开发人员的起点。

属性
@property (nonatomic, strong) UIPopOverController *buttonPopOverController;
方法
-(void) categoryButtonDidPress:(UIBarButtonItem *)sender {
    UIStoryboard *storyboard = self.storyboard;
    CategoryViewController *categoryVC = [storyboard instantiateViewControllerWithIdentifier:@"CategoryViewController "];
    self.buttonPopOverController = [[UIPopoverController alloc] initWithContentViewController:categoryVC];
    [self.buttonPopOverController presentPopoverFromBarButtonItem:self.categoryButtonItem permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];

}