无法使用UIBarButtonItem显示弹出控制器

时间:2012-04-07 08:44:31

标签: ios storyboard uipopovercontroller

我使用storyboard为我的项目开发UI。有很多问题都解决了,但这个问题让我很难过。我为UIBarButtonItem添加了操作:

- (IBAction)pressAddActionButton:(UIBarButtonItem *)sender {
if (_mode == itemSelect) {

    LookUpTableViewController *vc =  [self.storyboard instantiateViewControllerWithIdentifier:@"lookupTable"];
    vc.key = @"title";
    vc.data = [Linesheet MR_findAllSortedBy:@"title" ascending:YES];
    vc.lookUpDelegate = self;

    self.myPopoverController = [[UIPopoverController alloc] initWithContentViewController:vc];
    [self.myPopoverController presentPopoverFromBarButtonItem:sender permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES];      
} else {
    self.mode = itemSelect;
}

}

如果我使用storyBoard segue显示弹出窗口 - 一切都很好,但如果我在运行时,则弹出窗口不会显示。我应该手动创建UIBarButtonItem。

感谢您的帮助!!!

更新,按钮代码:

- (void)setupNavigationItems {

    self.navigationController.navigationBarHidden = NO;

    UIBarButtonItem *addItem;
    if (_mode == itemSelect) {
        addItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd 
                                                                target:self 
                                                                action:@selector(pressAddActionButton:)];   
    } else {
        addItem = [[UIBarButtonItem alloc] initWithTitle:@"Done" style:UIBarButtonItemStyleDone 
                                                  target:self 
                                                  action:@selector(pressDoneButton:)];
    }
    [addItem setStyle:UIBarButtonItemStyleBordered];

    UIBarButtonItem *separator = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace 
                                                                               target:self 
                                                                               action:nil];

    UIBarButtonItem *action = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAction 
                                                                            target:self 
                                                                            action:@selector(pressActionButton:)];
    [action setStyle:UIBarButtonItemStyleBordered];

    [toolbar setItems:[NSArray arrayWithObjects:separator, addItem, action, nil] animated:YES];
}

3 个答案:

答案 0 :(得分:2)

确保使用presentPopoverFromBarButtonItem行上的断点按预期命中代码。另外,如果你正在使用arc,请确保myPopoverController属性被声明为strong,否则它将在呈现行之前为nil。

答案 1 :(得分:0)

代码是对的。尝试使用self.navigationItem.leftBarButtonItemself.navigationItem.rightBarButtonItem替换发件人。发件人可能不是您所期望的。

同时删除if (_mode == itemSelect)子句以进行测试我不确定为什么需要直接访问ivar _mode ivar。

答案 2 :(得分:0)

您是否检查LookUpTableViewController *vc是否确实获得了正确的实例?如果没有,请检查您的故事板是否已将@"lookupTable"设置为控制器的标识符。