4

我使用故事板为我的项目开发 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 来显示popover - 一切都很好,但如果我在运行时这样做,popover 不会显示。我应该手动创建 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];
}
4

3 回答 3

2

确保使用该presentPopoverFromBarButtonItem行上的断点按预期运行代码。此外,如果您使用 arc,请确保 myPopoverController 属性声明为 strong,否则在呈现行之前它将为 nil。

于 2012-04-10T23:12:09.083 回答
0

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

于 2012-04-16T03:44:38.817 回答
0

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

还要删除(_mode == itemSelect)用于测试的 if 子句我不确定为什么需要直接访问 ivar _mode ivar。

于 2012-04-10T22:59:13.370 回答