2016-01-21 47 views
3

由於UIToolBar上的UIBarbuttonItem的操作沒有被調用,因此我遇到了麻煩。
在以下代碼中,雖然點擊toolBar上的doneBtn,但不會調用操作doneBtnAction:
你有什麼想法解決它嗎?在UIToolBar上的UIBarbuttonItem的操作不叫

- (void)viewDidLoad { 
    UIPickerView *pickerView = [[UIPickerView alloc] init]; 

    UIToolbar *toolBar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, -44, 320, 44)]; 
    UIBarButtonItem *doneBtn = [[UIBarButtonItem alloc] initWithTitle:@"Done" style:UIBarButtonItemStyleDone target:self action:@selector(doneBtnAction:)]; 
    UIBarButtonItem *flex = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil]; 
    toolBar.items = @[flex, doneBtn]; 
    [pickerView addSubview:toolBar]; 

    UITextField *textField = [[UITextField alloc] init]; 
    textField.inputView = pickerView; 
} 

- (void)doneBtnAction:(UIBarButtonItem *)sender { 
    NSLog(@"%@", sender); 
} 
+0

您是否看到'doneBtn'爲水龍頭設置了動畫效果? 'toolBar'如何定位在'pickerView'中? – hatfinch

+0

「UIPickerView」,「UIToolbar」,「UITextField」的框架的調試視圖層次結構。希望能幫到你 – SeraZheng

回答

4

不要添加工具欄爲選擇器視圖的子視圖,尤其是負y原點(無觸摸到工具欄,因爲水龍頭被剪切到選擇器視圖的幀)。

取而代之,使工具欄成爲文本字段的inputAccessoryView

textField.inputAccessoryView = toolBar; 

完整代碼:其他

- (void)viewDidLoad { 
    UIPickerView *pickerView = [[UIPickerView alloc] init]; 

    UIToolbar *toolBar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)]; 
    UIBarButtonItem *doneBtn = [[UIBarButtonItem alloc] initWithTitle:@"Done" style:UIBarButtonItemStyleDone target:self action:@selector(doneBtnAction:)]; 
    UIBarButtonItem *flex = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil]; 
    toolBar.items = @[flex, doneBtn]; 

    UITextField *textField = [[UITextField alloc] init]; 
    textField.inputView = pickerView; 
    textField.inputAccessoryView = toolBar; 
} 

一注 - 爲什麼不使用完成鍵入欄按鈕項目的標準體系?

+0

感謝您的支持,解決了這個問題。謝謝。 –

相關問題