使用自定义 table 视图单元从 UITextField 获取数据

Getting data from UITextField with custom table view cell

我正在构建一种数据库,因此我创建了一个带有自定义单元格的 table 视图,以便用户可以将请求的数据插入到适当的文本字段中。这是到目前为止的样子。

Database app

这是我为此编写的代码。

class customCell1: UITableViewCell {

    @IBOutlet weak var cc1TextField1: UITextField!
    @IBOutlet weak var cc1TextField2: UITextField!
    @IBOutlet weak var cc1TextField3: UITextField!

    @IBOutlet weak var cc1Label1: UILabel!
    @IBOutlet weak var cc1Label2: UILabel!
    @IBOutlet weak var cc1Label3: UILabel!

    @IBOutlet weak var cc1MainLabel: UILabel!

}

简而言之,我在 Swift 文件中创建了一个 class,我将其命名为 customCell1,而在 ViewController 中,我将其命名为 [=14] =],我插入了这些代码行,其中 inputDataString 是关于必须分配给每行中每个标签的不同标题的字符串向量。

func numberOfSections(in tableView: UITableView) -> Int {
        return 1
    }

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

return inputDataString.count

}

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

            let cell1 = tableView.dequeueReusableCell(withIdentifier: "myCell1", for: indexPath) as? customCell1

            cell1?.cc1MainLabel.text = inputDataString[indexPath.row]  

            cell1?.cc1Label1.text = "Fabrics"
            cell1?.cc1Label2.text = "Fittings"
            cell1?.cc1Label3.text = "Furniture"

            cell1?.cc1TextField1.placeholder = "Insert value here"
            cell1?.cc1TextField2.placeholder = "Insert value here"
            cell1?.cc1TextField3.placeholder = "Insert value here"

            return cell1!

        }

现在我的问题是,一旦用户在文本字段中添加了所有这些值并单击了我在导航栏上添加的保存按钮,我如何从各个文本字段中获取所有数据并将它们分配给一个变量,以便我可以使用这些值进行一些计算。而且,我在哪里添加这些代码行,以便一切正常。

您可以通过for在导航栏中的按钮操作中获取所有数据:

let fabrics = [String]()
let fittings = [String]()
let furnitures = [String]()
for index in 0 ... inputDataString.count-1 {
    fabrics.append((tableView.cellForRow(at: index) as! customCell1).cc1TextField1.text)
    fittings.append((tableView.cellForRow(at: index) as! customCell1).cc1TextField2.text)
    furnitures.append((tableView.cellForRow(at: index) as! customCell1).cc1TextField3.text)
}

在保存按钮的 IBAction 内部(假设您的 tableView 与 IBAction 在同一个 class 中)您可以遍历每个可见的单元格,就像讨论的那样 here 和然后在迭代代码中,您可以将其插入到您拥有的任何持久性存储中。例如:

@IBAction func saveButtonTapped(_ sender: Any) {
    let cells: [CustomCell1] = self.tableView.visibleCells as? [CustomCell1] ?? []
    for cell in cells {
        //Do the saving for each cell
    }
}

请记住,tableView 不会跟踪任何不可见的单元格,因为它们是回收的。如果您需要获取比可见单元格中更多的数据,则当单元格不再可见时,您将不得不以某种方式将单元格的信息保存到临时数组或 tableview 数据源中(一个好地方可能在 tableView 函数中didEndDisplayingCell) 然后你可以在需要保存的时候遍历数据源或者数组。

希望对你有帮助^^

首先,您应该使用 @IBAction 将导航栏上的按钮连接到代码。请参阅 Apple Tutorial 以了解如何执行此操作:

@IBAction func saveButtonPressed(_ sender: UIButton) {

}

接下来,在您刚刚创建的这个函数中,您可以编写以下代码来使用这些值:

//Create three arrays for the three categories of values:
var fabrics: [String] = []
var fittings: [String] = []
var furniture: [String] = []

//Create indexPath for looping through cells in tableview:
var index = IndexPath(row: 0, section: 0)

//Loop through cells, collecting all values from text fields and adding them to the arrays:
for row in 0..<inputDataString.count {
    index = IndexPath(row: row, section: 0)

    fabrics.append((tableView.cellForRow(at: index) as! customCell1).cc1TextField1.text!)
    fittings.append((tableView.cellForRow(at: index) as! customCell1).cc1TextField2.text!)
    furniture.append((tableView.cellForRow(at: index) as! customCell1).cc1TextField3.text!)
}

现在您可以随意使用这些值。