点击按钮时显示 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])
}
我想在单击此按钮时打开一个 UIPickerView。 我已经创建了这个按钮,现在当用户点击它时我想打开一个 UIPickerView。我在 Internet 上看到了很多教程,但所有教程都显示为:
textfield.inputview = uipker // i don't want to use extfield
但是想在没有文本字段的情况下实现它。 是否可能,如果可能,请告诉我该怎么做。
只是 hide/show 你的 uipickerview
。将选择器添加为情节提要中主视图的子视图,但将其隐藏。单击该按钮显示它。
添加带有完成按钮的工具栏以再次隐藏选择器。
如果您想从 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])
}