显示 UIPickerView 文本字段被选中,然后在选中后隐藏
Posted
技术标签:
【中文标题】显示 UIPickerView 文本字段被选中,然后在选中后隐藏【英文标题】:Show UIPickerView text field is selected, then hide after selected 【发布时间】:2014-11-08 16:35:43 【问题描述】:我正在尝试创建一个文本框,当它被选中时,一个 UIPickerView 会打开一个可供选择的选项。选择后,UIPickerView 将隐藏,所选项目显示在文本框中。我尝试了在网上找到的不同代码段,但我无法让它工作。如果有人可以为此建议一个完整的代码或告诉我我在代码中做错了什么,那将是非常棒的。非常感谢。
这是我的代码:
@IBOutlet var textfieldBizCat: UITextField!
@IBOutlet var pickerBizCat: UIPickerView! = UIPickerView()
var bizCat = ["Cat One", "Cat Two", "Cat Three"]
override func viewDidLoad()
super.viewDidLoad()
var bizCatCount = bizCat.count
self.textfieldBizCat.inputView = pickerView
// returns the number of 'columns' to display.
func numberOfComponentsInPickerView(pickerView: UIPickerView!) -> Int
return 1
// returns the # of rows in each component..
func pickerView(pickerView: UIPickerView!, numberOfRowsInComponent component: Int) -> Int
return bizCat.count
func pickerView(pickerView: UIPickerView!, titleForRow row: Int, forComponent component: Int) -> String!
return bizCat[row]
func pickerView(pickerView: UIPickerView!, didSelectRow row: Int, inComponent component: Int)
textfieldBizCat.text = "\(bizCat[row])"
【问题讨论】:
【参考方案1】:如果我能很好地理解您的问题,您希望:
-
有一个
UITextField
显示选定的文本
当用户点击UITextField
时打开一个选择器
选择项目(在选择器中)时关闭选择器,并将其设置在UITextField
这是管理它的完整代码,你只需要链接你的UITextField
的代表:
@IBOutlet var textfieldBizCat: UITextField!
@IBOutlet var pickerBizCat: UIPickerView! = UIPickerView()
var bizCat = ["Cat One", "Cat Two", "Cat Three"]
override func viewDidLoad()
super.viewDidLoad()
pickerBizCat.hidden = true;
textfieldBizCat.text = bizCat[0]
// returns the number of 'columns' to display.
func numberOfComponentsInPickerView(pickerView: UIPickerView!) -> Int
return 1
// returns the # of rows in each component..
func pickerView(pickerView: UIPickerView!, numberOfRowsInComponent component: Int) -> Int
return bizCat.count
func pickerView(pickerView: UIPickerView!, titleForRow row: Int, forComponent component: Int) -> String!
return bizCat[row]
func pickerView(pickerView: UIPickerView!, didSelectRow row: Int, inComponent component: Int)
textfieldBizCat.text = bizCat[row]
pickerBizCat.hidden = true;
func textFieldShouldBeginEditing(textField: UITextField) -> Bool
pickerBizCat.hidden = false
return false
我对您的代码所做的更改:
使用UITextFieldDelegate
在选择UITextField
时显示选择器
选择项目后隐藏选择器,并设置UITextField
选择任何项目时,在UITextField
中设置选择器的第一行
【讨论】:
感谢您的帮助 Ckouta。它现在在文本字段中显示“Cat One”,但是当我单击它时,UIPicker 没有出现。 您是否从您的 xib 中设置了 UITextField 委托?您也可以通过编程方式完成,只需添加textfieldBizCat.delegate = self
in viewDidLoad
哦,好的,忘记了。还需要将pickerBizCat.delegate = self 添加到viewDidLoad。现在它起作用了!非常感谢。
如果您有多个文本字段要在该视图中添加选择器,如何修改@Ckouta
那是另一个问题,我建议你直接用你的实际源代码在堆栈上提出一个新问题,问题...【参考方案2】:
在你的 didSelectRow 方法中你 resignFirstResponder 怎么样?
func pickerView(pickerView: UIPickerView!, didSelectRow row: Int, inComponent component: Int)
textfieldBizCat.text = bizCat[row]
pickerBizCat.resignFirstResponder()
【讨论】:
【参考方案3】:Swift 4 版本
override func viewDidLoad()
super.viewDidLoad()
pickerView.dataSource = self
pickerView.delegate = self
textField.delegate = self
textField.inputView = pickerView
还有扩展
// MARK: - UIPickerViewDelegate
extension ViewController: UITextFieldDelegate
func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool
pickerView.isHidden = false
return false
// MARK: - UIPickerViewDelegate
extension ViewController: UIPickerViewDelegate, UIPickerViewDataSource
func numberOfComponents(in pickerView: UIPickerView) -> Int
return 1
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int
return myItems.count
func pickerView( _ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String?
return myItems[row].name
func pickerView( _ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int)
textField.text = myItems[row].name
pickerView.isHidden = true
【讨论】:
【参考方案4】: // pressing the button again would hide the uipickerview. when pressed the first time, update the button's label to "done" , "hide" or whatever suits u!
@IBAction func propertyTypeButtonPressed(sender: UIButton)/* the name of your button's action*/
count++; //declare it first
ViewContainigPickerView.hidden = false
self.view.endEditing(true)
if (count == 2)
ViewContainingPickerView.hidden = true /* if you placed your picker on a separate view for simplicity*/
count = 0;
【讨论】:
以上是关于显示 UIPickerView 文本字段被选中,然后在选中后隐藏的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 UIPickerView 在一个视图中填充不同的文本字段?
UIPickerView 作为按钮操作并根据选择器的选定值设置文本字段的文本
在 AlertController 中从 UIPickerView 填充文本字段时出现问题