UIToolBar 上的 UIBarbuttonItem 的动作没有被调用
Posted
技术标签:
【中文标题】UIToolBar 上的 UIBarbuttonItem 的动作没有被调用【英文标题】:The action of UIBarbuttonItem on UIToolBar not called 【发布时间】:2016-01-21 01:53:54 【问题描述】:我遇到了问题,因为 UIToolBar 上的 UIBarbuttonItem 的操作没有被调用。
在下面的代码中,虽然toolBar
上的doneBtn
被点击了,但是doneBtnAction:
的动作没有被调用。
你有什么解决办法吗?
- (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);
【问题讨论】:
你看到doneBtn
动画水龙头了吗? toolBar
如何在 pickerView
中定位?
调试UIPickerView
、UIToolbar
、UITextField
框架的视图层次结构。希望对你有帮助
【参考方案1】:
不要将工具栏添加为选择器视图的子视图,尤其是具有负 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;
另一个注意事项 - 为什么不对栏按钮项使用标准系统完成类型?
【讨论】:
感谢您的支持,此问题已解决。谢谢。以上是关于UIToolBar 上的 UIBarbuttonItem 的动作没有被调用的主要内容,如果未能解决你的问题,请参考以下文章
未检测到 UIToolBar 上 UIToolBar 上的模态视图中的 UIButton 触摸未检测到
UIToolBar 上的 UIBarbuttonItem 的动作没有被调用