相同tableview的不同单元格中的不同选取器值

时间:2017-11-16 06:54:49

标签: ios swift uipickerview

我有一些像这样加载的tableview单元..

enter image description here

此处,qty字段从选择器字段中获取值。但问题是虽然两个字段都显示了选择器字段,但是在选择器字段中选择的数据仅在第二个字段和第一个字段中显示,但是我从选择器字段中选择一个值,该值是显示在第二个选择器字段而不是第一个。

我的选择器视图在viewDidLoad中定义了10个值,如此...

self.noOfItems = ["1","2","3","4","5","6","7","8","9","10"]

选择器视图已在我的tableview cellForRowAt中定义,如此...

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
   let cell: sellTableViewCell = tableView.dequeueReusableCell(withIdentifier: "sellProductIdentifier") as! sellTableViewCell
        cell.delegate = self

        let pickerView = UIPickerView()
        pickerView.delegate = self
        cell.qtyPickerField.inputView = pickerView
        cell.qtyPickerField.text = noOfItems[0]

        if let cell = cell.qtyPickerField.superview?.superview as? sellTableViewCell {
        myCell = cell

    }

        return cell
    }

我的选择器视图方法就像这样......

//Picker view methods
func numberOfComponents(in pickerView: UIPickerView) -> Int {
    return 1
}

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

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

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

    myCell.qtyPickerField.text = noOfItems[row]
}

2 个答案:

答案 0 :(得分:0)

我正在给你提示。

因为您在代码中添加了myCell = cell表示您的最后一个单元格已添加到 myCell 中,所以此处您的第二个单元格是最后一个单元格,如果您希望通过选择器编辑值,那么您可以仅更改最后一个单元格文本字段的值而不是特定的选定单元格。

您需要在 myCell 中添加特定单元格而不是最后一个单元格。您可以使用delegate UITextField方法获取特定单元格

来实现
if let cell = myTextField.superview.superview as? sellTableViewCell {
  myCell = cell
}

现在您可以使用myCell.qtyPickerField....

答案 1 :(得分:0)

将以下行添加到func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell

cell.qtyTxtFld.tag = indexPath.row
cell.qtyTxtFld.addTarget(self, action: #selector(self.PickerViewClicked(_:)), for: UIControlEvents.editingDidBegin)

然后将以下行添加到您的班级

 func PickerViewClicked(_ sender : UITextField)
 {
         myindexPath = IndexPath(row: sender.tag, section: 0)
         let cell = self.theTableView.cellForRow(at: myindexPath) as! sellTableViewCell
         cell.qtyTxtFld.inputView = self.thePickerView
  }

然后使用以下代码行

func numberOfComponentsInPickerView(_ pickerView: UIPickerView) -> Int
{
    return 1
}

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

func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String?
{
    return pickerArray[row] as? String
}

func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int)
{
        let cell = self.theTableView.cellForRow(at: myindexPath) as! sellTableViewCell
        cell.qtyTxtFld.text = pickerArray[row] as? String
        cell.qtyTxtFld.resignFirstResponder()
}

希望这能解决您的问题:)