web-dev-qa-db-ja.com

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

}
20
TimberWebDesign

私があなたの質問をよく理解したら、あなたは欲しい:

  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に設定します
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

DidSelectRowメソッドでresignFirstResponderについてはどうですか?

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