我有一个包含3个textField
的单元格的UITableView
。
每个单元格都是相同的,并从用户那里收集相同的输入数据:"事件"、"日期"one_answers"审查",使用每个单元格中的3个textField
。
在用户完成选择他们想要制作多少条目和单元格复制这些表单字段之后,我想将每个单元格的值并将它们放入命名为:var events = []
var dates = []
和var reviews = []
。或者,将事件、日期和审阅作为一个数组放入数组的数组中。
我如何能够在每个表格单元格中获取用户的输入,提取数据,并将它们存储到这些数组中?
我已经搜索了谷歌没有成功…(杯)的帮助!
这里有一些更多的信息来帮助你了解我的意思。用户说他们想在他们的日志中做3个条目。然后UITableView用3个相同的单元格填充:
- 事件
(空白文本字段)
日期(空白文本字段)
评论(空白文本视图)
UITABLE CELL 2
- 事件
(空白文本字段)
日期(空白文本字段)
评论(空白文本视图)
UITABLE CELL 3
- 事件
(空白文本字段)
日期(空白文本字段)
评论(空白文本视图)
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"
] ]
-
您需要使用以下命令获取所有可见单元格的索引:
NSArray *paths = [self.tableView indexPathsForVisibleRows];
-
然后将所有单元格放在某个数组中:
NSMutableSet * visblecells = [[NSMutableSet alloc] init];
for (NSIndexPath *path in paths) { [visibleCells addObject:[tableView cellForRowAtIndexPath:path]]; }
-
然后您可以从每个单元格中获取文本字段值:
for (UITableViewCell *thisCell in visible ecells) {//打印文本框NSLog (@ % @ n"thisCell.textField.text);}
希望能有所帮助。
您正在考虑的策略称为并行数组。虽然它可以工作,但维护起来有点困难,而且更容易出现bug——至少在我看来是这样。一些面向对象的东西会更适合你的需要。因此,我要做的是创建一个模型对象并创建这些对象的数组来存储数据。
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
}
}