Показывать текстовое поле UIPickerView, затем скрыть после выбранного

18

Я пытаюсь создать текстовое поле, которое при его выборе открывает 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])"

}
    
задан TimberWebDesign 08.11.2014 в 17:35
источник

3 ответа

39

Если я правильно понял ваш вопрос, вы хотите:

  1. Имейте UITextField , отображающее выбранный текст
  2. Открытие сборщика, когда пользователь нажимает UITextField
  3. Закройте сборщик, когда выбран элемент (в сборщике), и установите его в поле «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 , когда выбран какой-либо элемент.
ответ дан tbaranes 08.11.2014 в 17:47
источник
  • Спасибо за помощь Ckouta. Теперь он отображает «Cat One» в текстовом поле, но когда я нажимаю на него, UIPicker не появляется. –  TimberWebDesign 08.11.2014 в 18:41
  • Вы установили делегат UITextField из вашего xib? Вы можете сделать это также программно, просто добавьте textfieldBizCat.delegate = selfin viewDidLoad –  tbaranes 08.11.2014 в 18:43
  • О, хорошо забыл сделать это. Также необходимо добавить pickerBizCat.delegate = self для просмотраDidLoad. Теперь это работает! Спасибо. –  TimberWebDesign 08.11.2014 в 19:50
  • , как это будет изменено, если у вас есть несколько текстовых полей, в которые вы хотите добавить сборщик, в этом виде @Ckouta –  kareem 11.02.2015 в 04:54
  • Это еще один вопрос, я предлагаю вам задать новый вопрос о стеке непосредственно с вашим исходным кодом, вопрос ... –  tbaranes 11.02.2015 в 08:37
Показать остальные комментарии
0
  // 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;

        }

    }
    
ответ дан innovatorX 03.09.2015 в 10:27
источник
0

Как в вашем методе didSelectRow вы resignFirstResponder?

func pickerView(pickerView: UIPickerView!, didSelectRow row: Int, inComponent component: Int)
{
textfieldBizCat.text = bizCat[row]
pickerBizCat.resignFirstResponder()
}
    
ответ дан Tim Denison 29.06.2016 в 06:35
источник