在我的选择器视图中,我希望默认行为零。此行的值为1.我希望能够在视图控制器上触摸除按钮之外的任何内容。我知道有类似的问题,但它们对我不起作用。
override func viewWillAppear(_ animated: Bool) {
self.pickerView.delegate = self
self.pickerView.dataSource = self
self.pickerView.selectRow(0, inComponent: 0, animated: true)
}
func numberOfComponents(in pickerView: UIPickerView) -> Int {
return 1
}
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
return String(numbers[row])
}
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
return numbers.count
}
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
therow = pickerView.selectedRow(inComponent: 0) + 1
}
然后
@IBAction func submitTapped(_ sender:Any){ 打印(therow) }
当我点击提交并打印第0行的值时,它为0,但如果我摆动选择器视图并将其放回第0行,则打印1.我需要能够在选择器视图上触摸任何内容让它返回默认行的正确值。
答案 0 :(得分:2)
您应该使用 pickerview委托方法为您提供的@inject IHtmlResourceLocalizer _local
@Html.Raw(_local.Get("no-NB", "Tech"))
,因此您应该修改代码,如下所示:
row
例如,如果func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
therow = numbers[row]
//theRowIndex = row //this is the index of row that you selected
}
数组是数字= [1,2,3,4],当您单击代码上方的第一行时,将numbers
设置为1,如果您单击第二行,它会将therow
设置为2,依此类推。
如果您想使用您编写的代码,则可以按如下方式使用:
therow
这将为您提供所选行的编号,但我认为您在上述方法中不需要它。
现在,如果您不想触摸选择器,那么我认为您需要这样做:
therow = numbers[pickerView.selectedRow(inComponent: 0)]
答案 1 :(得分:1)
使用数据加载选择器视图后,请使用此语句。
yourPicker.selectRow(0, inComponent:0, animated:true)
您可以通过更改selectRow的第一个参数来更改默认选择的值。
答案 2 :(得分:1)
我认为发生这种情况的原因是,如果以编程方式选择行,则didSelectRow
不会被调用。根据{{3}}:
当 用户 选择组件中的行时,由选择器视图调用。
因此,您需要在致电therow
后以编程方式设置selectRow
属性:
self.pickerView.selectRow(0, inComponent: 0, animated: true)
therow = 1 // <--- this line