Swift 循环遍历 UITableView 中的所有 UITextView

Posted

技术标签:

【中文标题】Swift 循环遍历 UITableView 中的所有 UITextView【英文标题】:Swift loop through all UITextViews from UITableView 【发布时间】:2018-05-18 18:38:59 【问题描述】:

我生成了一个 TableView,其中包含我从 API 获取的项目列表。结果是它向我展示了一个带有 UILabel 和 UITextView 的 TableView。 该代码有效并给了我想要的结果:

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 
        let cell:FormCell = self.tableView.dequeueReusableCell(withIdentifier: "cell") as! FormCell
        cell.formLabel.text = (self.fetchedData[indexPath.section] as! String)
// id is available = (self.fetchedDataID[indexPath.section] as! String)
        return cell
    

    class FormCell: UITableViewCell 
        @IBOutlet weak var formLabel: UILabel!
        @IBOutlet var formAnswer: UITextView!
    

但现在我想在 UITextViews 中提交所有给定 formAnswer 的“答案”。如何做到这一点?

我想发布到 API 的结果类似于:

let params = [
    "id-of-": "theValueOfTheFormAnswer", // every Value of each UITextView 
] as [String : Any]

let requestURL = "/post-url"
let request = Alamofire.request(requestURL, method: .post, parameters: params, encoding: JSONEncoding.default, headers: nil)

【问题讨论】:

在您担心发送值之前,您需要修复您的表格,以便它在用户滚动表格视图时正常工作。您在cellForRow 中没有代码来设置单元格的文本视图文本。 【参考方案1】:

您应该尝试从表格视图的所有单元格中检索所有文本视图——这绝对不会起作用,因为单元格(及其所有子视图)可能会被重用,因此数据滚动离开屏幕的单元格将永远丢失。

相反,每次在数据模型中修改文本视图(或失去焦点等)时,您都必须存储数据。用户完成后,您只需将模型的数据发送到您的后端。

设置UITextViewDelegate 委托并通过以下方法之一更新模型:

textViewDidEndEditing textViewDidChange

【讨论】:

在哪个事件上? 你通常设置一个委托,然后在委托协议的一些方法中实现你的模型更新 不要将委托设置为单元格本身,也不要存储单元格内的任何数据。单元格是一个 UI 组件,仅用于显示数据。相反,在cellForRow 调用中将委托设置为视图控制器(以使事情变得简单)。 让它工作。谢谢。但 textViewDidEndEditing 仅在离开单元格的当前文本视图时触发。和 textViewDidChange 总是,但这会导致大量请求后端。以及如何获取填充的uitextview的indexpath? 要获取选定的单元格,请检查:***.com/questions/4318386/…

以上是关于Swift 循环遍历 UITableView 中的所有 UITextView的主要内容,如果未能解决你的问题,请参考以下文章

在 Swift 中循环遍历 Alamofire JSON 结果

循环遍历数组以获取项目的索引 - swift

优化 Swift 中的嵌套 for 循环

遍历数组只获得 Swift Playground 中的第一个值

在 SWIFT 中自定义 UITableview 的第一行

Swift 3:通过遍历视图数组来设置视图