Swift-工具栏完成按钮未出现在UIPickerView子视图中

时间:2019-03-18 12:46:51

标签: ios swift uikit uipickerview uitoolbar

我是一位快速入门的初学者,试图学习UIPickerView,它已完成从选择器视图中选择后关闭按钮的操作。我有以下代码将工具栏和完成按钮添加到选择器中,作为子视图中的工具栏。它显示为空白的黑色工具栏(随附的屏幕截图) enter image description here

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的插座。我究竟做错了什么?我提到了其他问题,但它们似乎并不能解决我的问题。有什么建议吗?

2 个答案:

答案 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
}