How to make UITableview with Textfield in swift?

前端 未结 4 534
广开言路
广开言路 2020-12-15 21:30

I want to make a table view with textfields in each cell,

I have a custom class in a swift file:

import UIKit

public class TextInputTableViewCell: U         


        
相关标签:
4条回答
  • 2020-12-15 22:03

    this method is init the cell,u have not model to save this datas,so

    text = cell.textfield.text
    

    is nothing! you can init var textString in viewcontroller,an inherit UITextFieldDelegate

    optional func textFieldDidEndEditing(_ textField: UITextField)
    {
         textString = _textField.text
    }
    optional func textFieldShouldReturn(_ textField: UITextField) -> Bool{
        return true
    }
    

    and cell.textField.text = textString

    0 讨论(0)
  • 2020-12-15 22:12

    create a variable

    var arrayTextField = [UITextField]()
    

    after this in your func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell{} add

    self.arrayTextField.append(textfield)
    

    before returning cell, after this to display the values using

    for textvalue in arrayTextField{
            println(textvalue.text)
        }
    
    0 讨论(0)
  • 2020-12-15 22:14

    In your view controller become a UITextFieldDelegate

    View Controller

    
    class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate, UITextFieldDelegate {
    
        var allCellsText = [String]()
    
        func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    
            let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! CustomTableViewCell
    
            cell.theField.delegate = self // theField is your IBOutlet UITextfield in your custom cell
    
            cell.theField.text = "Test"
    
            return cell
        }
    
        func textFieldDidEndEditing(textField: UITextField) {
            allCellsText.append(textField.text!)
            println(allCellsText)
        }
    }
    
    

    This will always append the data from the textField to the allCellsText array.

    0 讨论(0)
  • 2020-12-15 22:15

    So here is a way to do it using the suggestion of having a textfield array. It uses the tag of the textfield to ensure it does not get added multiple times when you scroll.

    // Assumes that you have a label and a textfield as a part of you tableViewCell
    
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    
        guard let cell = tableView.dequeueReusableCell(withIdentifier: "cell") as? BodyStatsTableViewCell else {
            return UITableViewCell()
        }
        cell.rowLabel.text = bodyTableArray[indexPath.row].rowTitle
        let tagValue = indexPath.row + 100
        var newRow = true
        for textvalue in arrayTextField{
            if textvalue.tag == tagValue {
                newRow = false
            }
        }
        if newRow {
            cell.rowTextField.tag = tagValue
            self.arrayTextField.append(cell.rowTextField)
            cell.rowTextField.text = bodyTableArray[indexPath.row].rowValue
        }
        return cell
    }
    

    // And then you cam get the values when you want to save with where tag - 100 will be the array index value to update

    for textvalue in arrayTextField{ print(textvalue.text) }

    0 讨论(0)
提交回复
热议问题