PickerView默认行已选中但返回零,除非移动了选择器视图

时间:2017-09-26 04:39:04

标签: ios swift uipickerview viewdidload

在我的选择器视图中,我希望默认行为零。此行的值为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.我需要能够在选择器视图上触摸任何内容让它返回默认行的正确值。

3 个答案:

答案 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