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

Posted

技术标签:

【中文标题】Swift - UIPickerView 子视图中没有出现工具栏完成按钮【英文标题】:Swift - Toolbar done button not appearing in UIPickerView subview 【发布时间】:2019-03-18 12:46:50 【问题描述】:

我是 swift 的初学者,正在尝试学习 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 的出口。我究竟做错了什么?我提到了其他问题,但它们似乎并没有解决我的问题。有什么建议吗?

【问题讨论】:

你想在用户触摸textfield时打开选择器? @ArashEtemad 不,我知道那部分。现在我想添加完成按钮,以便我可以在选择后关闭选择器。 只需创建一个容器视图,其中包含您的选择器和工具栏。 我认为你应该像这样使用 dateText.inputAccessoryView = numberToolbar 检查这个网址.. ***.com/questions/31728680/… 【参考方案1】:

这行你错了:

picker.addSubview(toolBar)

Picker 不应该有任何子视图 - 它本身就是一个全面的视图,其中没有任何区域可以容纳任何额外的东西。

相反,您需要在同一个视图中添加选择器和工具栏,并将它们彼此对齐

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)
])

【讨论】:

如果是这样,如何在顶部添加黑条? :( @pritesh 大概这是两个不同的视图,彼此相邻【参考方案2】:

您不应将 toolBar 添加为选择器的subView

你应该将toolBar设置为textField的inputAccessoryView

当我搜索这个问题时,我发现实现您想要的常用方法(也是最简单的方法)是使用虚拟文本字段

这意味着在按钮的确切框架处创建一个 textField 并将其隐藏,当用户触摸按钮时使 textField 成为 firstResponder。

@IBAction func pickerButtonClicked(_ sender: Any) 
    self.pickerViewTextField.becomeFirstResponder

【讨论】:

我在点击按钮时显示它,它说它是一个只读属性。请帮我写代码。

以上是关于Swift - UIPickerView 子视图中没有出现工具栏完成按钮的主要内容,如果未能解决你的问题,请参考以下文章

Swift 3:滚动视图中的 UIPickerView

如何在 UIPickerview iOS swift 中为组件赋予标题

在 Xcode 9 / Swift 4 中不再可以访问原生 UIKit 元素的子视图?

如何禁用 UIPickerView (Swift)?

如何使用 monotouch 在 uitableviewcell 中添加 uipickerview 作为子视图?

Swift 3 中的 UIPickerView 和子类数组