Swift - UIPickerView子视图中的工具栏完成按钮未显示

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


@ArashEtemad 不,我已经解决了那部分。现在我想添加一个“完成”按钮,以便在选择后可以关闭选择器。 - pritesh
只需创建一个容器视图,其中包含您的选择器和工具栏。 - Parvendra Singh
请查看此网址:https://dev59.com/0VwZ5IYBdhLWcg3wM97Z#31728914 - Parvendra Singh
@ParvendraSingh inputAccessoryView不起作用。我没有文本字段可以附加它。它说它是只读属性。你给的链接是针对TextField的。 - pritesh
聊天讨论解决了这个问题。谢谢! - pritesh
显示剩余8条评论
2个回答

0

你在这一行是错误的:

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
@pritesh,这可能是两个相邻的不同视图。 - The Dreams Wind

-1

你不应该将工具栏添加为选择器的subView

你应该将工具栏设置为文本框的inputAccessoryView

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

这意味着在按钮的确切框架中创建一个文本框并将其隐藏,当用户触摸按钮时,使文本框成为第一响应者。

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

当我点击按钮时,它显示为只读属性。请帮我解决这个问题,提供代码。 - pritesh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接