我试图向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显示就没有成功。
有什么建议吗?
提前多多感谢!
答案 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)
我遇到过类似的问题。它可能不是最干净的方式,但我发现同时使用textFieldDidBeginEditing
和textFieldDidEndEditing
可以取消隐藏并解除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的子视图包含在内)
希望这有帮助!