iosswifttablecell

How to access textview value which is inside tableview cell in swift 5?


I have one viewcontroller, inside that I have one table view and 2 buttons save and cancel. In tableview cell i have one textview. after adding some text in textview i want to show that text. I am not sure how to get that tableview text on save button click. (number of rows may be dynamic).

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

                if let cell = tableview.dequeueReusableCell(withIdentifier: "SummaryManualEditContentCell", for: indexPath) as? SummaryManualEditTableCell {


                    cell.txtAnswers.text = "enter text here"

                    return cell
                }
            return UITableViewCell()
        }

@IBAction func btnSave(_ sender: Any) {
        print("textviewText1 + textviewText2 + and so on ")
   }

In Addition to this on button click i want to add all that text multiple textviews into one string. is there any clean and best way to achieve this?

Thank you for helping!


Solution

  • You need to get the indexPath of the cell whose text you want to get get the cell for that indexpath like

    @IBAction func btnSave(_ sender: Any) {
          let indexPath = IndexPath(row: 0, section: 0)
          if let cell = tableView.cellForRow(at: indexPath) as? SummaryManualEditTableCell {
            let text = cell.txtAnswers.text
            }
        }
    

    And if you have multiple cells with textFields you can loop around to get all fields

      @IBAction func btnSave(_ sender: Any) {
    var allTextViewsText = ""
           for i in 0...5{
              let indexPath = IndexPath(row: i, section: 0)
              if let cell = tableView.cellForRow(at: indexPath) as? SummaryManualEditTableCell {
                allTextViewsText += cell.txtAnswers.text
                }
            }
      print(allTextViewsText)
    }
    

    But keep it in mind that this approach only works in the case of visible cells otherwise for non visible cells you will get nil

    I will suggest you to implement textView:shouldChange in each cell who has textView with a delegate to the tableView's viewController. When text is changed in the cell, delegate should propagate the change to the viewController which will save the value in a variable.

    Then, when you press on the save button, you would simply take values from variables.