web-dev-qa-db-fra.com

Afficher le champ de texte UIPickerView est sélectionné, puis masquer après la sélection

J'essaie de créer une zone de texte qui, lorsqu'elle est sélectionnée, ouvre un UIPickerView avec des choix à sélectionner. Une fois sélectionné, l'UIPickerView se cache et l'élément sélectionné s'affiche dans la zone de texte. J'ai essayé différents morceaux de code que j'ai trouvés en ligne, mais je n'arrive pas à le faire fonctionner. Si quelqu'un peut suggérer un code complet pour cela ou me dire ce que je fais mal dans mon code, ce serait super génial. Merci beaucoup.

Voici mon code:

@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])"

}
20
TimberWebDesign

Si j'ai bien compris votre question, vous voulez:

  1. Avoir un UITextField qui affiche un texte sélectionné
  2. Ouverture d'un sélecteur lorsque l'utilisateur clique sur UITextField
  3. Fermez le sélecteur lorsqu'un élément (dans le sélecteur) est sélectionné et définissez-le dans le champ `UITextField

Voici le code complet pour le gérer, il vous suffit de lier le délégué de votre 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
}

Ce que j'ai changé de votre code:

  • UITextFieldDelegate utilisé pour afficher le sélecteur lorsque UITextField est sélectionné
  • Masquer le sélecteur une fois qu'un élément est sélectionné et configurer le UITextField
  • Définissez la première ligne de votre sélecteur dans UITextField lorsqu'un élément est sélectionné
44
tbaranes
  // 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;

        }

    }
0
innovatorX

Que diriez-vous de votre méthode didSelectRow pour démissionner FirstResponder?

func pickerView(pickerView: UIPickerView!, didSelectRow row: Int, inComponent component: Int)
{
textfieldBizCat.text = bizCat[row]
pickerBizCat.resignFirstResponder()
}
0
Tim Denison