使用故事板中的标识符以编程方式设置popover segue

时间:2015-07-08 01:16:52

标签: objective-c storyboard segue popover programmatically-created

我有一个关于弹出窗口的略微独特的情况。我刚刚完成添加第三个导航项(UIBarButtonItem),我必须以编程方式创建,因为故事板只允许两个导航项。这个新按钮当前使用我在故事板中设置的标识符来切换到视图控制器。一切都按原样运作,但我需要设置一个popover而不是push。由于此按钮是在代码中创建的,因此我无法在故事板中为弹出窗口设置锚点。有没有办法将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];
Current Segue将推出故事板。
-(void) categoryButtonDidPress:(UIBarButtonItem *)sender {
    [self performSegueWithIdentifier:@"categorySegue" sender:nil];
}

1 个答案:

答案 0 :(得分:1)

以下代码显示了如何根据上面提供的限制在您的应用中添加一个弹限窗口。此功能与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];

}