Swift:如何在按下按钮时遍历所有tableViewRows

时间:2017-03-07 23:35:20

标签: ios swift uitableview

我创建了一个静态tableView,并希望将每个tableViewCell(所有单元格都是不同的自定义tableViewCells)的数据保存到CoreData。如何在按下按钮时遍历所有TableViewCells?我没有使用Storyboard,所以我没有IBOutlets。

编辑:对不起,也许我应该指出我的问题。请参阅下面的代码。 我有3个CustomCells。 FirstCustomCell包括一个Textfield,SecondCustomCell包含一个UIPickerView,ThirdCustomCell包含一个UIDatePicker。控制器还包括saveButton()。如果我按下按钮我想从TextField,UIPickerView和UIDatePicker获取输入。

//TableViewController
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
switch indexPath.row {
    case 0:
        return tableView.dequeueReusableCell(withIdentifier: cellId1) as! FirstCustomCell //includes a UITextField
    case 1:
        return tableView.dequeueReusableCell(withIdentifier: cellId2) as! SecondCustomCell //includes a UIPickerView
    case 2:
        return tableView.dequeueReusableCell(withIdentifier: cellId3) as! ThirdCustomCell //includes a UIDatePicker
    default:
        return UITableViewCell(style: .default, reuseIdentifier: nil)
    }
}    

如何在TableViewController中的saveButton()上访问TextField,UIPickerView和UIDatePicker的输入?

2 个答案:

答案 0 :(得分:3)

您不应该在单元格中存储数据。您应该有一个模型对象来保存单元格中的数据,并将数据安装到单元格中。然后,如果用户编辑该数据,您应该在编辑时收集编辑并将其应用到模型中。

然后,您可以干净利落地将模型持久保存到Core数据中。

现在你正在使用一个静态表视图,这样你就可以使用你正在使用的方法,但这并不是说这是一个很好的方法 - 它绝对不是。

对于普通的表格视图,屏幕上会有更多的单元格,并且表格视图会循环使用单元格,并在用户滚动它们时重复使用它们。当单元格滚出屏幕时,其字段中的设置将被丢弃。

答案 1 :(得分:1)

简短回答:您不必遍历所有表格视图行。原因如下:

  • 这是一个STATIC表格视图。这意味着您以编程方式创建了所有表格视图单元格(因为您不使用故事板)。这意味着您确切知道有多少个单元格。

你应该做什么:

  • 只要有STATIC表视图,就声明属性。
  • 如果每个表视图单元都有UITextField / UILabel / UISwitch / UIButton ...来保存您需要的数据,则声明UITextField / UILabel / UISwitch / UIButton ...属性并访问其数据以保存到核心数据。