2012-08-30 82 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就開始正確響應所有選擇器。