将UITableView Cell TextField值添加到Array? (SWIFT)

时间:2015-07-07 21:44:08

标签: ios swift uitableview

我有UITableView个单元格,其中包含3个textField s。

每个单元格都是相同的,并从用户收集相同的输入数据:" event"," date"," review"在每个单元格中使用3 textField

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

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

我没有成功地搜索谷歌......(Gulp)帮助!

更新

以下是一些可以帮助您了解我的意思的信息。用户说他们想在他们的日记中输入3个条目。然后,UITableView将填充3个相同的单元格:

UITABLE CELL 1

  • EVENT [空白文字字段]

  • DATE [空白文字字段]

  • 审核 [空白文字视图]

UITABLE CELL 2

  • EVENT [空白文字字段]

  • DATE [空白文字字段]

  • 审核 [空白文字视图]

UITABLE CELL 3

  • EVENT [空白文字字段]

  • DATE [空白文字字段]

  • 审核 [空白文字视图]

之后,此数据将转换为多维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"
] ]

2 个答案:

答案 0 :(得分:0)

  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);     }

  4. 希望它有所帮助。

答案 1 :(得分:0)

您正在考虑的策略称为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!
}

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

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
    }
}