【问题标题】:Getting data from UITextField with custom table view cell使用自定义表格视图单元从 UITextField 获取数据
【发布时间】:2018-04-19 21:56:34
【问题描述】:

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

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 文件中,我创建了一个类,我将其命名为 customCell1,而在 ViewController 中,我将其命名为 InputDataController,我插入了这些代码行,其中 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!

        }

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

【问题讨论】:

    标签: ios swift uitableview xcode8


    【解决方案1】:

    您可以通过导航栏按钮的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 func saveButton(_ sender: UIBarButtonItem) { ... } 中复制您所写的内容(除了变量,我在另一个 .swift 文件中插入)我仍然有错误。特别是,我收到错误“对成员'tableView(_numberOfRowsInSection:)'的模糊引用”。我该如何解决这个问题?我必须在 IBAction 内部准确复制什么,在外部复制什么?感谢您的帮助
    【解决方案2】:

    在保存按钮的 IBAction 内部(假设您的 tableView 与 IBAction 在同一个类中)您可以遍历每个可见单元格,就像所讨论的 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),然后您可以在需要保存时遍历数据源或数组。

    希望对你有帮助^^

    【讨论】:

      【解决方案3】:

      首先,您应该使用@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!)
      }
      

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

      【讨论】:

      • 如果在 IBAction func saveButton(_ sender: UIBarButtonItem) { ... } 中复制您所写的内容(除了变量,我在另一个 .swift 文件中插入)我仍然有错误。特别是,我收到错误“对成员'tableView(_numberOfRowsInSection:)'的模糊引用”。我该如何解决这个问题?我必须在 IBAction 内部准确复制什么,在外部复制什么?感谢您的帮助
      • @DanieleRocchi 你确定没有我的代码你不会得到错误吗?我的代码似乎与此方法无关。
      • 当然,如果没有您的代码,即使没有保存按钮,一切都可以正常工作,但是当我尝试复制您的代码以及其他答案中提出的代码时,我收到了这个奇怪的错误。我可以将代码发送给您,以便您可以告诉我是否有问题?
      • 嗯...你能告诉我你的视图控制器类定义吗?
      • 我想我知道你的问题。从情节提要的表格视图中创建一个名为tableView 的插座,并将其连接到代码(@IBOutlet)。
      猜你喜欢
      • 2018-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-01
      • 2015-03-07
      • 1970-01-01
      相关资源
      最近更新 更多