UIBarButtonItem没有响应click

时间:2012-08-30 05:06:58

标签: objective-c ios cocoa-touch ipad

我有一个UITableView,我希望用户能够在该部分的标题中单击两个按钮,一个用于添加新记录,另一个用于编辑它们,所以我首先尝试使用{{1和tableView viewForHeaderInSection这样:

tableView heightForHeaderInSection

当我运行应用程序时,我可以正确地看到三个UIBarButtonItems,我可以单击它们,但是从不调用NSLog行。因此,我在nib文件中直接添加了- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section { return 44; } - (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { UIView* v = [[UIView alloc] initWithFrame:CGRectMake(10, 10, 360, 44)]; UIToolbar* tb = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 360, 44)]; UIBarButtonItem* spacer = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:self action:nil]; UIBarButtonItem* addBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(onAddVehicleInterest:)]; UIBarButtonItem* editBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemEdit target:self action:@selector(onEditVehiclesInterest:)]; [tb setItems:[NSArray arrayWithObjects:spacer, addBtn, editBtn, nil]]; [v addSubview:tb]; return v; } - (IBAction)onAddVehicleInterest: (id) sender { NSLog(@"Add"); } - (IBAction)onEditVehiclesInterest:(id)sender { NSLog(@"Edit"); } ,向其中添加了3个UIToolbar控件,并将UIBarButtonItemonAddVehicleInterest绑定到相应的按钮。但那也不起作用......

所以,作为最后一次测试,我在nib中添加了onEditVehiclesInterest并将其Touch Up Inside事件绑定到其中一个方法,并且按预期工作。所以我很困惑。我做错了什么?

3 个答案:

答案 0 :(得分:5)

我在视图控制器的父视图上有一个UITapGestureRecognizer。一旦我删除了轻击手势,我的UIBarButtonItems就开始对所有选择器做出正确响应。

答案 1 :(得分:1)

我也遇到了同样的问题,我通过改变来解决问题: -

- (IBAction)onAddVehicleInterest: (id) sender {
to 
- (IBAction)onAddVehicleInterest: (UIBarButtonItem *) sender {

我也不知道为什么它没有提前工作,但我的问题解决了。 你可以试试这个。

答案 2 :(得分:0)

试试这个:

UIBarButtonItem* addBtn;
if([self respondsToSelector:@selector(onAddVehicleInterest:)])
{
    addBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(onAddVehicleInterest:)];
}

UIBarButtonItem* editBtn
if([self respondsToSelector:@selector(onEditVehiclesInterest:)])
{
    editBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemEdit target:self action:@selector(onEditVehiclesInterest:)];
}

if(addBtn && editBtn)
{
   [tb setItems:[NSArray arrayWithObjects:spacer, addBtn, editBtn, nil]];
}