点击按钮时显示 UIPickerView

Posted

技术标签:

【中文标题】点击按钮时显示 UIPickerView【英文标题】:Show a UIPickerView when a button is tapped 【发布时间】:2018-12-14 06:01:25 【问题描述】:

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

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

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

【问题讨论】:

您可以创建选择器视图并将其作为子视图添加到主视图,如果您希望它在按钮单击时使用。但最首选的方法是使用文本字段而不是按钮。 【参考方案1】:

如果您想从 Interface Builder 中执行此操作,则可以在 StoryBoard 中添加 UIPickerView 并最初隐藏该 UIPickerView 并在您点击按钮时显示它。

如果你想通过编码来做到这一点,那么你可以试试这个。

将此定义为全局。

var toolBar = UIToolbar()
var picker  = UIPickerView()

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

注意:如果您不想这样做,我会在按钮操作中编写整个代码,只需在 viewDidLoad 中编写所有代码并在您的按钮操作 self.view.addSubview(picker) 和 @ 中仅编写这些行987654327@

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

在完成按钮上,您可以删除 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])

【讨论】:

谢谢@Kuldeep .. 我只是将UIPickerViewDataSourcepicker.dataSource = self 添加到您的回复中。【参考方案2】:

只需隐藏/显示您的uipickerview。将选取器添加为情节提要中主视图的子视图,但将其隐藏。单击该按钮时显示它。

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

【讨论】:

这不会占用大量内存吗?

以上是关于点击按钮时显示 UIPickerView的主要内容,如果未能解决你的问题,请参考以下文章

当我在点击布局问题上设置:isEnabled:false 时,Nativescript 按钮在点击时显示文本背景颜色

单击四个按钮中的任何一个时显示插页式广告

在自动完成输入上写入时显示/隐藏按钮

Nativescript-vue 在点击事件时显示图像

如何制作点击按钮时显示的加载动画?它应该占据全屏并且应该从右到左并消失

如何通过 Javascript / jQuery 在按钮单击时显示引导警报?