2016-08-27 24 views
0

@IBOutletを使用して、オプションとビューとサブビューを設定するのに苦労しています。私は現在、データベースにユーザーを追加するコントローラを作成しようとしています。私のフィールドの1つはユーザーの性別に関連しているので、UIPickerViewにリンクさせたいと思っています。 私はストーリーボードを使用していません。Swift - UIViewControllerのテキストフィールドにpickerViewを追加する

私は他のすべてのフィールドを自分のコードから削除して、より短く読みやすくしましたが、誕生日のような他の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 
} 
} 
+0

が、それはあなたhttp://blog.apoorvmote.com/uipickerview-as-inputview-to-uitextfield-in-swift助けこれを見る

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

にこれらのコードを移動することです/ –

+0

サードパーティのライブラリを使用することができる場合、ActionSheetPickerView-3.0はかなり使い勝手の良いライブラリであり、使いやすいです。 https://github.com/skywinder/ActionSheetPicker-3.0 – RPK

答えて

0

genderTextFieldは、呼び出すたびに作成されています。

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

これらはすべて、あなたがここに追加どのような異なるオブジェクト

inputsContainerView.addSubview(genderTextField) 

あるも異なっています。したがって、ビューに追加したtextFieldと追加したデリゲート/データソースはすべて異なります。一つの迅速な解決策は、この行の後inputsContainerView.addSubview(genderTextField)

関連する問題