Подтвердить что ты не робот

Отобразить текстовое поле 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])"

}
4b9b3361

Ответ 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()
}