3

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

- (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直接在 nib 文件中添加了一个,将 3 个UIBarButtonItem控件添加到它,并将 and 绑定onAddVehicleInterestonEditVehiclesInterest相应的按钮。但这也不起作用...

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

4

3 回答 3

5

我在视图控制器的父视图上有一个 UITapGestureRecognizer。移除点击手势后,我的 UIBarButtonItems 开始正确响应所有选择器。

于 2013-06-22T06:44:12.333 回答
1

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

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

我也不知道为什么它不能更早地工作,但我的问题已经解决了。你可以试试这个。

于 2012-08-30T05:27:28.267 回答
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]];
}
于 2012-08-30T05:18:39.377 回答