UIBarButtonItem 在 UIToolBar 中不可点击
Posted
技术标签:
【中文标题】UIBarButtonItem 在 UIToolBar 中不可点击【英文标题】:UIBarButtonItem not clickable in UIToolBar 【发布时间】:2015-02-27 08:12:55 【问题描述】:我有一个 UIPickerView
,我正在添加一个 UIToolBar
和 2 个 UIBarButtonItems
。
var toolBar = UIToolbar()
toolBar.frame.origin.y = -40
toolBar.barStyle = UIBarStyle.Default
toolBar.translucent = true
toolBar.tintColor = UIColor(red: 76/255, green: 217/255, blue: 100/255, alpha: 1)
toolBar.sizeToFit()
var doneButton = UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.Bordered, target: self, action: "donePicker")
var spaceButton = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.FlexibleSpace, target: nil, action: nil)
var cancelButton = UIBarButtonItem(title: "Cancel", style: UIBarButtonItemStyle.Bordered, target: self, action: "canclePicker")
toolBar.setItems([cancelButton, spaceButton, doneButton], animated: false)
toolBar.userInteractionEnabled = true
pickerView.addSubview(toolBar)
pickerView.bringSubviewToFront(toolBar)
view.bringSubviewToFront(toolBar)
问题是,当我尝试单击 UIBarButtonItem 时,它不会触发,甚至无法识别它,它只是单击它下面的单元格。
【问题讨论】:
我看到的唯一原因是这个 toolBar.frame.origin.y = -40。工具栏超出了选择器视图的范围。 我用y=0试了一下,还是一样,只是这次点击了它下面的pickerView... 您是否尝试过 pickerView.inputAccessoryView = toolBar 而不是将其添加为子视图? 是的,这是我的意图,但如果我设置 inputAccessoryView,它甚至不会显示工具栏。你的意思是 textField.inputAccessoryView 对吗?无法将附件视图添加到pickerView 对不起。不是pickerView.inputAccessoryView。 textField.inputView = pickerView textField.inputAccessoryView = toolBar 【参考方案1】:你能试试这个代码吗?
var textField = UITextField(frame: CGRectMake(20, 50, view.width - 40, 30))
textField.backgroundColor = UIColor.redColor()
view.addSubview(textField)
var pickerView = UIPickerView(frame: CGRectMake(0, 200, view.width, 300))
pickerView.backgroundColor = UIColor.whiteColor()
pickerView.showsSelectionIndicator = true
var toolBar = UIToolbar()
toolBar.barStyle = UIBarStyle.Default
toolBar.translucent = true
toolBar.tintColor = UIColor(red: 76/255, green: 217/255, blue: 100/255, alpha: 1)
toolBar.sizeToFit()
var doneButton = UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.Bordered, target: self, action: "donePicker")
var spaceButton = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.FlexibleSpace, target: nil, action: nil)
var cancelButton = UIBarButtonItem(title: "Cancel", style: UIBarButtonItemStyle.Bordered, target: self, action: "canclePicker")
toolBar.setItems([cancelButton, spaceButton, doneButton], animated: false)
toolBar.userInteractionEnabled = true
textField.inputView = pickerView
textField.inputAccessoryView = toolBar
【讨论】:
是的,谢谢大家,这对我有帮助并且有效!我的问题是我没有 textField.inputAccessoryView = 工具栏,而是将 UIToolbar 添加为 UIPicker 的子视图。现在我的“完成”按钮像冠军一样开火!!!【参考方案2】:我认为你需要使用标准的 UIResponder 机制来提升选择器和工具栏,或者使用隐藏的 UITextField 作弊来获得相同的结果。
查看我对您原始问题的更新答案:
Add buttons to UIPickerView - Swift 1.2
【讨论】:
以上是关于UIBarButtonItem 在 UIToolBar 中不可点击的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Swift 中为 UIBarButtonItem 设置动作
在 Swift 中获取 UIBarButtonItem 的视图