2016-08-27 3 views
0

Ich habe ein wenig Probleme mit Optionen und Einrichten von Ansichten und Untersichten mit einem @IBOutlet. Ich versuche gerade, einen Controller zu erstellen, um einen Benutzer zur Datenbank hinzuzufügen. Eines meiner Felder bezieht sich auf das Geschlecht des Benutzers. Daher möchte ich, dass es mit einem UIPickerView verknüpft ist. Ich verwende kein Storyboard.Swift - Hinzufügen einer PickerView zu einem Textfeld in UIViewController

Ich entfernte alle anderen Felder aus meinem Code, um es viel kürzer und lesbar zu machen, aber es wird auch andere UIPickerView Felder (wie Geburtstag) haben.

Kann mir jemand mit meinem Code helfen, so dass mein Textfeld ein UIPickerView anzeigt, wenn ausgewählt?

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

dies zu bewegen sehen, es hilft Ihnen http://blog.apoorvmote.com/uipickerview-as-inputview-to-uitextfield-in-swift/ –

+0

Wenn Sie offen für die Verwendung von Drittanbieter-Bibliotheken sind, ist ActionSheetPickerView-3.0 eine ziemlich gute Bibliothek und einfach zu bedienen. https://github.com/skywinder/ActionSheetPicker-3.0 – RPK

Antwort

0

genderTextField wird jedes Mal, wenn Sie diesen Aufruf erzeugt zu werden.

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

All dies sind verschiedene Objekte

inputsContainerView.addSubview(genderTextField) 

Was Sie hier hinzugefügt ist auch anders. Das textField, das Sie der Ansicht hinzugefügt haben, und die von Ihnen hinzugefügte Delegate/Datenquelle sind alle unterschiedlich. Eine schnelle Lösung ist

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

diesen Code nach dieser Zeile inputsContainerView.addSubview(genderTextField)

Verwandte Themen