当点击按钮时显示一个UIPickerView

10

在此输入图片描述

我想在点击此按钮时打开一个UIPickerView。 我已经创建了这个按钮,现在当用户点击它时,我想打开一个UIPickerView。我看过互联网上的许多教程,但所有教程都是用以下方式显示:

textfield.inputview = uipker // i don't want to use extfield

但希望不使用文本字段实现它。如果可能的话,请告诉我如何做到这一点。


你可以创建 PickerView 并将其作为子视图添加到主视图中,如果想在按钮点击时显示。但更推荐的方式是使用 TextField 而不是按钮。 - Mehul Thakkar
2个回答

39
如果你想在 Interface Builder 中完成此操作,那么可以在 storyboard 中添加 UIPickerView,并最初隐藏该 UIPickerView,在按钮被点击时显示它。如果你想通过编码来完成这个操作,那么可以尝试以下代码。将其定义为全局变量。
var toolBar = UIToolbar()
var picker  = UIPickerView()

在您的按钮操作中添加以下代码。我已经在工具栏中添加了一个Done按钮来关闭选择器。

注意:如果您不想这样做,只需在viewDidLoad中编写所有代码,并在您的按钮操作中仅编写以下代码:self.view.addSubview(picker)self.view.addSubview(toolBar)

@IBAction func YOUR_BUTTON__TAP_ACTION(_ sender: UIButton) {
    picker = UIPickerView.init()
    picker.delegate = self
    picker.dataSource = self
    picker.backgroundColor = UIColor.white
    picker.setValue(UIColor.black, forKey: "textColor")
    picker.autoresizingMask = .flexibleWidth
    picker.contentMode = .center
    picker.frame = CGRect.init(x: 0.0, y: UIScreen.main.bounds.size.height - 300, width: UIScreen.main.bounds.size.width, height: 300)
    self.view.addSubview(picker)
            
    toolBar = UIToolbar.init(frame: CGRect.init(x: 0.0, y: UIScreen.main.bounds.size.height - 300, width: UIScreen.main.bounds.size.width, height: 50))
    toolBar.barStyle = .blackTranslucent
    toolBar.items = [UIBarButtonItem.init(title: "Done", style: .done, target: self, action: #selector(onDoneButtonTapped))]
    self.view.addSubview(toolBar)
}

您可以通过点击“完成”按钮来删除工具栏以及选择器视图。

@objc func onDoneButtonTapped() {
    toolBar.removeFromSuperview()
    picker.removeFromSuperview()
}

UIPickerView 的委托方法

func numberOfComponents(in pickerView: UIPickerView) -> Int {
    return 1
}
    
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
    return YOUR_DATA_ARRAY.COUNT
}
    
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
    return YOUR_DATA_ARRAY[row]
}
    
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
    print(YOUR_DATA_ARRAY[row])
}

1
感谢 @Kuldeep .. 我只是在你的回答中添加了 UIPickerViewDataSourcepicker.dataSource = self - el3ankaboot

0

只需隐藏/显示您的uipickerview。在故事板中将选择器添加为主视图的子视图,但保持其隐藏状态。单击该按钮即可显示它。

添加带有完成按钮的工具栏以再次隐藏选择器。这里是一个链接


这不会占用太多内存吗? - tushar

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