簡體   English   中英

Swift-在UIViewController中向文本字段添加pickerView

[英]Swift - Adding a pickerView to a textfield in UIViewController

我在使用可選選項方面有些掙扎,並通過使用@IBOutlet設置視圖和子視圖。 我目前正在嘗試創建一個控制器,以將用戶添加到數據庫中。 我的字段之一與用戶的性別有關,因此我希望將其鏈接到UIPickerView。 我沒有使用Storyboard。

我從代碼中刪除了所有其他字段,以使其變得更短且更易讀,但它還將具有其他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
}
}

每次調用該方法時,就會創建一個characterTextField。

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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM