Different picker values in different cells of same

2019-09-20 16:04发布

I have some tableview cells loaded like this..

enter image description here

Here, the qty field gets value from the picker field. But the issue is though both fields does show the picker fields, the data as per what is selected in the picker field is shown in the 2nd field only and in the 1st field, though I select a value from the picker field, that value is shown in the 2nd picker field instead of the 1st.

My picker view has 10 values defined in viewDidLoad like so...

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

The picker view has been defined in my tableview cellForRowAt like so...

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
    }

My picker view methods have been given like so...

//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条回答
欢心
2楼-- · 2019-09-20 16:28

I'm giving you hint.

Because in you code you added myCell = cell means your last cell is added in the myCell so here your second cell is last cell and if you wish to edit value by picker then you can change only last cell textfield's value not specific selected cell.

Here you need add specific cell in myCell instead of last one. You can do it by use of delegate method of UITextField get specific cell by

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

Now you can use myCell.qtyPickerField....

查看更多
够拽才男人
3楼-- · 2019-09-20 16:29

add the below lines into your func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell

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

then add the below lines into your class

 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
  }

then use the below lines of codes

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()
}

hope this will solve your issue :)

查看更多
登录 后发表回答