3

tableView viewForHeaderInSectionユーザーがセクションのヘッダーにある 2 つのボタンをクリックできるようにする UITableView があります。1 つは新しいレコードを追加するためのもので、もう 1 つはそれらを編集するためのものですtableView 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");
}

アプリを実行すると、3 つの UIBarButtonItems が正しく表示され、クリックできますが、NSLog 行は呼び出されません。そこでUIToolbar、nib ファイルに を直接追加し、それに 3 つのUIBarButtonItemコントロールを追加し、onAddVehicleInterestonEditVehiclesInterestをそれぞれのボタンに結び付けました。しかし、それもうまくいきません...

そこで、最後のテストとして、UIButtonペン先に a を追加し、Touch Up Inside イベントをメソッドの 1 つに関連付けました。これは期待どおりに機能します。だから私は混乱しています。私は何を間違っていますか?

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 に答える