【问题标题】:Add UITableView Cell TextField values to Array? (Swift)将 UITableView 单元格文本字段值添加到数组? (迅速)
【发布时间】:2015-07-07 21:44:07
【问题描述】:

我有一个UITableView,其中的单元格包含 3 个textFields。

每个单元格都是相同的,并使用每个单元格中的 3 个textFields 从用户那里收集相同的输入数据:“事件”、“日期”和“评论”。

在用户完成选择他们想要创建的条目数量并且单元格复制这些表单字段后,我想获取每个单元格的值并将它们放入名为的数组中: var events = []var dates = []var reviews = []。或者,将事件、日期和评论作为一个数组放入一组数组中。

如何在每个表格单元格中获取用户输入、提取数据并将它们存储到这些数组中?

我已经搜索了谷歌但没有成功...(Gulp)帮助!

更新

这里有更多信息可以帮助您了解我的意思。用户说他们想在他们的日记中输入 3 个条目。然后 UITableView 会填充 3 个相同的单元格:

可用单元格 1

  • 事件 [空白文本字段]

  • 日期 [空白文本字段]

  • 审查 [空白文本视图]

可用单元格 2

  • 事件 [空白文本字段]

  • 日期 [空白文本字段]

  • 审查 [空白文本视图]

UITABLE CELL 3

  • 事件 [空白文本字段]

  • 日期 [空白文本字段]

  • 审查 [空白文本视图]

之后,这些数据被转换为多维 JSON 数据并由 PHP 解析(该部分已经完成并与存根数据一起使用)。我的目标是最终数据在 Swift 中看起来像这样:

var  userData  = [
[
    "event": "user event 1",
    "date": "user date 1",
    "review": "user review 1"
],
[
    "event": "user event 2",
    "date": "user date 2",
    "review": "user review 2"
],
[
    "event": "user event 3",
    "date": "user date 3",
    "review": "user review 3"
] ]

【问题讨论】:

    标签: ios swift uitableview


    【解决方案1】:
    1. 您需要使用以下方法获取所有可见单元格的索引路径:

      NSArray *paths = [self.tableView indexPathsForVisibleRows];
      
    2. 然后获取某个数组中的所有单元格:

      NSMutableSet *visibleCells = [[NSMutableSet alloc] init];

      for (NSIndexPath *path in paths) {
          [visibleCells addObject:[tableView cellForRowAtIndexPath:path]];
      }
      
    3. 然后您可以从每个单元格中获取文本字段值:

      for (UITableViewCell *thisCell in visibleCells) { //打印文本字段 NSLog(@"%@\n", thisCell.textField.text); }

    希望对你有帮助。

    【讨论】:

    • 感谢您的建议。你会碰巧知道这样做的 Swift 版本吗?尽管我希望我在 Obj-C 中更冗长,但我只是一个 Swift 人:)
    【解决方案2】:

    您正在考虑的策略称为parallel arrays。虽然它会起作用,但维护起来会有点困难,而且更容易出现错误——至少在 IMO 中是这样。面向对象的东西会更好地满足您的需求。所以,我要做的是创建一个模型对象并创建这些对象的数组来存储数据。

    struct MyModel {
        let event: String
        let review: String
        let date: NSDate
    }
    

    然后,假设您有一个看起来像这样的单元格:

    class MyTableCell: UITableViewCell {
    
        @IBOutlet weak var eventLabel: UILabel!
        @IBOutlet weak var dateLabel: UILabel!
        @IBOutlet weak var reviewTextView: UITextView!
    }
    

    在表格视图控制器中将数据构建为这些模型的数组。当需要填充单元格时,请使用 tableView(_:cellForRowAtIndexPath:) 方法中的 indexPath 参数从模型数组中选择模型。

    class MyTableViewController: UITableViewController {
    
        var models = [MyModel]()
    
        lazy var dateFormatter = NSDateFormatter()
    
        override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
            if let cell = tableView.dequeueReusableCellWithIdentifier( "myIdentifier" ) as? MyTableCell {
                let model = self.models[ indexPath.row ]
    
                cell.eventLabel.text = model.event
                cell.dateLabel.text = self.dateFormatter.stringFromDate(model.date)
                cell.reviewTextView.text = model.review
    
                return cell
            }
            fatalError( "Could not create cell" )
        }
    
        override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
            return self.models.count
        }
    }
    

    【讨论】:

    • 感谢您的建议!尽管这个答案似乎适用于获取预先存在的数据和构建表格单元格。我的问题是让用户填写空文本字段,然后提取这些值以添加到数组中。你能提供一些指导吗?非常感谢!
    猜你喜欢
    • 2020-06-03
    • 2014-01-24
    • 1970-01-01
    • 1970-01-01
    • 2016-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多