UiPickerview 值在 swift 中显示为问号(“?”) - 但是在将其分配给文本框时获得正确的值

Posted

技术标签:

【中文标题】UiPickerview 值在 swift 中显示为问号(“?”) - 但是在将其分配给文本框时获得正确的值【英文标题】:UiPickerview values displayed as question mark ("?")in swift - But getting the correct value while assigning it to a textBox 【发布时间】:2017-11-17 23:41:57 【问题描述】:

//向下滚动选择器视图时,我能够在文本框中看到正确的值。但是选择器视图显示为“?” (问号)。我对需要将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()
  

【问题讨论】:

我已经检查了几乎所有与 Swift UIPickerView 相关的可用答案,但似乎都没有解决这个问题。请大家帮忙 对不起,我明白了你的意思。我之前在通过 Internet 尝试不同的解决方案时删除的方法签名中的 pickerview 之前的下划线。我将其恢复回来。也会在问题中改变它。谢谢你的收获。我认为 ViewLoad 方法中的 txtPaidYear.inputView = datePickerView 有问题。它抛出 libc++abi.dylib:以 NSException 类型的未捕获异常终止。 我不知道为什么我的问题被标记为重复,因为它指向的答案不能解决这个问题。该答案表示 titleForRow 委托函数中缺少参数组件。但这在我的代码中是正确的。 哦...非常感谢。让我纠正一下。实际上这是我第一次在堆栈溢出中问一些东西。因为这是我第一次遇到在堆栈溢出中没有任何答案的东西。非常感谢您的帮助 大家好..感谢您的所有回复。我刚刚删除了所有的 TextView 委托,它工作了。仍然需要弄清楚确切的问题是什么。很高兴它得到了修复。 @Leo Dabus:非常感谢。我刚刚像你说的那样创建了一个独立的项目并且它工作了。我就是这样想到删除 textview delegates 的。幸运的是得到了工作。 ?????????? 【参考方案1】:

****你必须改变这样的方法之后它肯定会起作用。** 并删除您正在使用的 TextField 的委托..**

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

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

func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int)

【讨论】:

谢谢,我会试试的【参考方案2】:

我刚刚删除了类中的所有 TextView 委托,并且它起作用了。仍然需要弄清楚确切的问题是什么。 textView 委托方法之一似乎导致了这个问题。我需要弄清楚。无论如何问题都得到了解决。我刚刚创建了一个独立的项目并实施了 UIPIckerView ,它工作得很好。因此,我在我的项目中做了同样的事情,删除了所有的 textview 委托方法。 非常感谢您的支持。

【讨论】:

【参考方案3】:

替换:

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

与:

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

【讨论】:

如果可能,请努力提供额外的解释,而不仅仅是代码。此类答案往往更有用,因为它们可以帮助社区成员,尤其是新开发人员更好地理解解决方案的推理,并有助于避免需要解决后续问题。

以上是关于UiPickerview 值在 swift 中显示为问号(“?”) - 但是在将其分配给文本框时获得正确的值的主要内容,如果未能解决你的问题,请参考以下文章

想要在 UIAlertController 或 UIPopoverController Swift 中显示 UIPickerView?

UIPickerView不显示数据Swift 3

Swift - 水平 UIPickerView

单击 UIButton 以显示 UIPickerView 并在按钮标题上选择 ID:Swift

如何在 iOS Swift 3 中滚动到 UIPickerView 中的特定行

iOS Swift:UIPickerView 文本对齐