我是一位快速入门的初学者,试图学习UIPickerView,它已完成从选择器视图中选择后关闭按钮的操作。我有以下代码将工具栏和完成按钮添加到选择器中,作为子视图中的工具栏。它显示为空白的黑色工具栏(随附的屏幕截图)
let toolBar = UIToolbar()
toolBar.barStyle = .black
toolBar.sizeToFit()
let doneBtn = UIBarButtonItem.init(title: "Done", style: .plain, target: self, action: #selector(self.closePicker))
toolBar.items = [doneBtn]
toolBar.isUserInteractionEnabled = true
picker.addSubview(toolBar)
Picker是控制器中UIPickerView的插座。我究竟做错了什么?我提到了其他问题,但它们似乎并不能解决我的问题。有什么建议吗?
答案 0 :(得分:0)
您在这一行上错了:
picker.addSubview(toolBar)
选择器不应该具有任何子视图-它本身就是一个综合视图,并且其中没有区域可以容纳任何其他内容。
相反,您需要在同一视图中同时添加选择器和工具栏,并将它们彼此对齐
let toolBar = UIToolbar()
...configure your toolbar here...
guard let superview = picker.superview else { return }
superview.addSubview(toolBar)
toolBar.translateAutoresizingMaskIntoConstraints = false
NSLayoutConstraints.activate([
toolBar.topAnchor.constraint(equalTo: superview.topAnchor),
toolBar.leftAnchor.constraint(equalTo: superview.leftAnchor),
toolBar.rightAnchor.constraint(equalTo: superview.rightAnchor),
toolBar.bottomAnchor.constraint(equalTo: picker.topAnchor)
])
答案 1 :(得分:-1)
您不应将ToolBar添加为选择器的subView
。
您应该将工具栏设置为textField的inputAccessoryView
。
搜索此问题时,我发现实现您想要的目标的通用方法(也是最简单的方法)是使用虚拟textField 。
这意味着在按钮的确切框架处创建一个textField并将其隐藏,当用户触摸按钮时,将textField设置为firstResponder。
@IBAction func pickerButtonClicked(_ sender: Any) {
self.pickerViewTextField.becomeFirstResponder
}