我使用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];
}
答案 0 :(得分:2)
确保使用presentPopoverFromBarButtonItem
行上的断点按预期命中代码。另外,如果你正在使用arc,请确保myPopoverController属性被声明为strong,否则它将在呈现行之前为nil。
答案 1 :(得分:0)
代码是对的。尝试使用self.navigationItem.leftBarButtonItem
或self.navigationItem.rightBarButtonItem
替换发件人。发件人可能不是您所期望的。
同时删除if (_mode == itemSelect)
子句以进行测试我不确定为什么需要直接访问ivar _mode ivar。
答案 2 :(得分:0)
您是否检查LookUpTableViewController *vc
是否确实获得了正确的实例?如果没有,请检查您的故事板是否已将@"lookupTable"
设置为控制器的标识符。