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?
单击 UIButton 以显示 UIPickerView 并在按钮标题上选择 ID:Swift