2012-08-30 52 views
3

我有一个UITableView,我希望用户能够点击该部分的标题中的两个按钮,一个用于添加新记录,另一个用于编辑它们,所以我首先使用tableView viewForHeaderInSectiontableView heightForHeaderInSection这样的尝试:UIBarButtonItem没有响应点击

- (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"); 
} 

当我运行应用程序,我可以正确地看到三个UIBarButtonItems,我可以点击他们,但NSLog的线永远不会被调用。所以我直接在笔尖文件中添加了一个UIToolbar,添加了3 UIBarButtonItem控件,并将onAddVehicleInterestonEditVehiclesInterest连接到相应的按钮。但这也行不通...

因此,作为最后一项测试,我在笔尖上添加了一个UIButton,并将其TouchUp Inside事件绑定到其中一种方法,并且按预期工作。所以我很困惑。我究竟做错了什么?

+0

我刚刚测试了你的代码,它对我来说运行良好。 – Ander

+0

谢谢@Ander,您的测试给了我一个主意,我是对的。我在父视图上有一个gestureRecognizer,这与按钮事件有关。一旦我添加了一个测试(检查超级视图是否为UIToolbar),它工作正常。 –

回答

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]]; 
} 
+0

检查我的答案 –

1

我也面临着同样的问题,我得到它解决了通过改变: -

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

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

5

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