选择我的UITextField时显示UIPicker

时间:2014-08-03 01:52:54

标签: swift uitextfield uipickerview ios8

我试图向UIPicker显示,每当我触摸/选择/按下我的UITextField时,它最初都会被隐藏。

到目前为止,这是我的代码:

class RegistrationViewController: UIViewController, UIPickerViewDelegate, UITextFieldDelegate {

    @IBOutlet var getGender: UIPickerView! = UIPickerView()

    @IBOutlet var genderTextField: UITextField! = nil

    @IBOutlet var passTextField: UITextField!

    @IBOutlet var repassTextField: UITextField!



    let gender = ["Male", "Female", "Other"]

    override func viewDidLoad() {
        super.viewDidLoad()

        genderTextField.delegate = self

        passTextField.secureTextEntry = true
        repassTextField.secureTextEntry = true

        getGender.hidden = true


        if(genderTextField.becomeFirstResponder()){

        }

        // Do any additional setup after loading the view.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    // 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 gender.count
    }

    func pickerView(pickerView: UIPickerView!, titleForRow row: Int, forComponent component: Int) -> String! {
        return gender[row]
    }

    func pickerView(pickerView: UIPickerView!, didSelectRow row: Int, inComponent component: Int)
    {
        genderTextField.text = "\(gender[row])"

    }

我已经设置了所有内容,因此只要您从getGender UIPicker中选择值,genderTextField就会更改其值。但是,每当我点击genderTextField时,试图让pickerView显示就没有成功。

有什么建议吗?

提前多多感谢!

4 个答案:

答案 0 :(得分:1)

除非您计划在控制器上使用多个UIPickerView,否则您根本不需要setGender.hidden = true然后setGender.hidden = false。请注意,这并不隐藏折叠选择器视图,它只是隐藏视图,因此您将留下一个空白框,其中包含选择器视图或键盘。

您可以将self.view.endEditing(true)添加到didSelectRow消息中,如下所示

func pickerView(pickerView: UIPickerView!, didSelectRow row: Int, inComponent component: Int)
{
    genderTextField.text = "\(gender[row])"
    self.view.endEditing(true)

}

答案 1 :(得分:0)

我不确定您如何设置getGender UIPickerView,但看起来您只是在viewDidLoad上设置了getGender.hidden = true

要再次显示此内容,请在此方法中与UITextField Delegate method textFieldDidBeginEditing联系并将getGender.hidden设置为false

答案 2 :(得分:0)

您的代码几乎没问题,只需要一个小修复。您没有为文本字段设置默认输入法。

首先,您可能不需要IBOutlet选择器视图,因为您不希望它一直显示在您的视图和UI构建器中,而是只是弹出它单击文本框时的单次时间。所以删除它是安全的。

其次,您需要将默认输入更改为UIPickerView并将其委托给self

getGender.delegate = self
genderTextField.inputAccessoryView = getGender

应该工作,享受!

答案 3 :(得分:0)

我遇到过类似的问题。它可能不是最干净的方式,但我发现同时使用textFieldDidBeginEditingtextFieldDidEndEditing可以取消隐藏并解除pickerView:

func textFieldDidBeginEditing(textField: UITextField) {
    if textField == genderTextField {
        getGender.hidden = false
    }
}

func textFieldDidEndEditing(textField: UITextField) {
    if textField == genderTextField {
        resignFirstResponder()
        getGender.hidden = true
    }
}

我确信可能有更简单的方法来实现这一目标,但希望现在有所帮助。

我遗憾地发现textField中的键盘在UI底部显示时会隐藏我的选择器视图。我必须更改UITextField的输入方法以防止这种情况发生(在viewDidLoad中)。

genderTextField.inputView = getGender

(如果您遇到崩溃事件,请不要将getGender作为ViewController的子视图包含在内)

希望这有帮助!