2016-08-27 25 views
0

我正在用option選項和使用@IBOutlet設置視圖和子視圖。我目前正在嘗試創建一個控制器來將用戶添加到數據庫。我的其中一個字段與用戶的性別有關,所以我希望它與UIPickerView鏈接。 我沒有使用Storyboard。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/ –

+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和您添加的委託/數據源都是不同的。一個快速的解決方案是將

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

這些代碼此行後inputsContainerView.addSubview(genderTextField)

相關問題