Отобразить текстовое поле UIPickerView, затем скрыть после выбранного
Я пытаюсь создать текстовое поле, которое при его выборе открывает 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
, когда выбран любой элемент
Ответ 2
// pressing the button again would hide the uipickerview. when pressed the first time, update the button label to "done" , "hide" or whatever suits u!
@IBAction func propertyTypeButtonPressed(sender: UIButton)/* the name of your button 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;
}
}
Ответ 3
Как в вашем методе didSelectRow вы resignFirstResponder?
func pickerView(pickerView: UIPickerView!, didSelectRow row: Int, inComponent component: Int)
{
textfieldBizCat.text = bizCat[row]
pickerBizCat.resignFirstResponder()
}