UiPickerview值在swift中显示为问号(“?”) - 但在将其分配给textBox时获取正确的值

时间:2017-11-17 23:41:58

标签: ios swift uipickerview

//向下滚动选择器视图时,我能够在文本框中看到正确的值。但是选择器视图显示为“?” (问号)。我很困惑我需要将pickerview作为输入视图分配给文本框。但对我面临的错误仍然没有任何意义。

我正在使用Xcode 9和Swift 3.2。

class BillDetailsViewController: UIViewController ,UITextFieldDelegate,UIPickerViewDelegate,UIPickerViewDataSource{

  //Variables  Declaration

  //Picker view outlet
  @IBOutlet var datePickerView: UIPickerView!

  //Picker view datasource - integer array
  var integerArray = [Int](1899...2500)

  //Textbox where picked value to be shown
  @IBOutlet var txtPaidYear: UITextField!

  //ViewLoad
  override func viewDidLoad() {

    super.viewDidLoad()
    self.hideKeyboardWhenTappedAround()

    datePickerView.isHidden = true
    datePickerView.reloadAllComponents()
    datePickerView.dataSource = self
    datePickerView.delegate = self
    txtPaidYear.inputView = datePickerView
  }

  //picker view delegate functions

  public func numberOfComponents(in pickerView: UIPickerView) -> Int {
    return 1
  }

  public func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
    return integerArray.count
  }

  public func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String! {
    let pickerValue: String = String(integerArray[row])
    return pickerValue
  }

  public func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
    txtPaidYear.text = String(integerArray[row])
    self.datePickerView.reloadAllComponents()
  }
}

3 个答案:

答案 0 :(得分:1)

****您必须像这样更改方法,否则它肯定会起作用。** 并删除正在使用的TextField的代表。.**

func pickerView(_ pickerView:UIPickerView,numberOfRowsInComponent组件:Int)-> Int { }

func pickerView(_ pickerView:UIPickerView,titleForRow行:Int,forComponent组件:Int)->字符串? { }

func pickerView(_ pickerView:UIPickerView,didSelectRow行:Int,inComponent组件:Int){ }

答案 1 :(得分:0)

我刚删除了类中的所有TextView delgates并且它工作正常。仍然需要弄清楚究竟是什么问题。 textView委托方法之一似乎导致了问题。我需要解决这个问题。任何问题都得到解决。我刚刚创建了一个独立项目并实现了UIPIckerView,它的工作非常完美。因此,我在我的项目中删除了所有textview委托方法。 非常感谢您的支持。

答案 2 :(得分:0)

替换:

func pickerView(_ pickerView: UIPickerView, titleForRow row: Int) -> String? {}

使用:

func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {}