在UIViewController的文本框中添加一个pickerView



我正在努力与可选和使用@IBOutlet设置视图和子视图。我目前正在尝试创建一个控制器来添加用户到数据库。我的一个字段与用户的性别相关,所以我希望它链接到一个UIPickerView。

我从我的代码中删除了所有其他字段,使它更短和可读,但它也会有其他UIPickerView字段(如生日)。

有人可以帮助我与我的代码,使我的文本字段将显示一个UIPickerView时选择?

class AddUserController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource, UITextFieldDelegate {
var picker: UIPickerView = UIPickerView()
var genderData = ["Male", "Female"]
// Containers
let inputsContainerView: UIView = {
    let view = UIView()
    view.backgroundColor = UIColor.whiteColor()
    view.translatesAutoresizingMaskIntoConstraints = false
    view.layer.masksToBounds = true
    return view
}()
// Subviews
@IBOutlet weak var genderTextField: UITextField! = {
    var gender = UITextField()
    gender.placeholder = "Gender"
    gender.translatesAutoresizingMaskIntoConstraints = false
    gender.leftViewMode = UITextFieldViewMode.Always
    gender.autocorrectionType = .No
    let lbl = UILabel(frame: CGRect(x: 0, y: 0, width: 120, height: 30))
    lbl.text = "GENDER"
    lbl.font = UIFont.boldSystemFontOfSize(12)
    gender.leftView = lbl
    return gender
}()
override func viewDidLoad() {
    super.viewDidLoad()
    picker = UIPickerView()
    picker.dataSource = self
    picker.delegate = self
    picker.hidden = true
    genderTextField?.delegate = self
    genderTextField?.inputView = picker
    genderTextField?.text = genderData[0]
    view.backgroundColor = UIColor(white: 0.95, alpha: 1)
    view.addSubview(inputsContainerView)
    setupInputsContainerView()
}
// Picker functions
func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int {
    return 1
}
func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
    return genderData.count
}
func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
    return genderData[row]
}
func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int)
{
    genderTextField.text = genderData[row]
    self.view.endEditing(true)
    picker.hidden = true
}
func textFieldShouldBeginEditing(textField: UITextField) -> Bool {
    picker.hidden = false
    return true
}
// Setup all the views
func setupInputsContainerView() {
    inputsContainerView.centerXAnchor.constraintEqualToAnchor(view.centerXAnchor).active = true
    inputsContainerView.topAnchor.constraintEqualToAnchor(view.bottomAnchor, constant: 12).active = true
    inputsContainerView.widthAnchor.constraintEqualToAnchor(view.widthAnchor, constant: -24).active = true
    inputsContainerView.heightAnchor.constraintEqualToConstant(40).active = true
    inputsContainerView.addSubview(genderTextField)
    genderTextField.leftAnchor.constraintEqualToAnchor(inputsContainerView.leftAnchor, constant: 12).active = true
    genderTextField.topAnchor.constraintEqualToAnchor(inputsContainerView.topAnchor).active = true
    genderTextField.widthAnchor.constraintEqualToAnchor(inputsContainerView.widthAnchor).active = true
    genderTextField.heightAnchor.constraintEqualToAnchor(inputsContainerView.heightAnchor).active = true
}
}

genderTextField在每次调用时都被创建。

genderTextField?.delegate = self
genderTextField?.inputView = picker
genderTextField?.text = genderData[0]

这些都是不同的对象

inputsContainerView.addSubview(genderTextField)

你在这里添加的内容也不同。你添加到视图的textField和你添加的委托/数据源都是不同的。一个快速的解决方案是移动

genderTextField?.delegate = self
genderTextField?.inputView = picker
genderTextField?.text = genderData[0]

这行之后的代码inputsContainerView.addSubview(genderTextField)

相关内容

最新更新