2016-01-21 52 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

感谢您的支持,解决了这个问题。谢谢。 –

相关问题