点击按钮时显示 UIPickerView

Show a UIPickerView when a button is tapped

我想在单击此按钮时打开一个 UIPickerView。 我已经创建了这个按钮,现在当用户点击它时我想打开一个 UIPickerView。我在 Internet 上看到了很多教程,但所有教程都显示为:

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

但是想在没有文本字段的情况下实现它。 是否可能,如果可能,请告诉我该怎么做。

只是 hide/show 你的 uipickerview。将选择器添加为情节提要中主视图的子视图,但将其隐藏。单击该按钮显示它。

添加带有完成按钮的工具栏以再次隐藏选择器。 一个link那个

如果您想从 Interface Builder 中执行此操作,则可以在故事板中添加 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)
}

在“完成”按钮上,您可以删除工具栏和 PickerView。

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