通用 UITableView

Generic UITableView

这是一个很笼统的问题,我已经阅读了很多答案,但我仍然想知道应该如何正确地完成它。

当你有一个类似于 iOS 中的设置的 table 视图时,你有一个 table 视图单元格,其中包含许多不同的(就类型而言)单元格(有些带有UISwitcheUIPickerViews,更多细节,UITextFields,等等)应该使用 static tableView 还是 dynamic 来完成?实现类似目标的最佳方式是什么?

我要求的案例是,应该从 Firebase 数据库等后端提取信息。

简单看你的需求,

  1. 如果您要显示 UI 元素,例如 UITextFieldUISwitch 等。基于特定条件或来自 api 响应意味着您可以去dynamic tableView。在动态 tableView 中,您可以设计具有不同标识符的多个单元格,或者您可以在 nib.
  2. 中创建 tableViewCell
  3. 如果您总是要显示相同的 UI 元素意味着您可以使用 static tableView

如果您想根据 firebase database 的响应显示 UI 个元素,您可以使用 dynamic TableView。然后只有您才能控制您的流程和数据。

谢谢。

您应该在 table 视图中创建自定义单元格,然后您需要检测要使用的单元格类型,然后再设置单元格。

假设您有三种类型的细胞:

  1. 带有 Switch (自定义)
  2. 的单元格
  3. 带有 textField (自定义)
  4. 的单元格
  5. 常规单元格(常规)

在您的 cellForRowAt 中,您需要检测要使用哪种类型的单元格。如果您有静态位置,您可以通过检查 indexPath.row 来做到这一点,或者您可以检查数组中的数据类型并根据它设置单元格。

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    switch indexPath.section {
    case 0:
        let cell = tableView.dequeueReusableCell(withIdentifier: "SwitchCell", for: indexPath) as! SwitchCell
        // set cell values here
        return cell
    case 1:
        let cell = tableView.dequeueReusableCell(withIdentifier: "TextFieldCell", for: indexPath) as! TextFieldCell
        // set cell values here
        return cell
    default:
        let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! UITableViewCell
        // set cell values here
        return cell
    }
}

Here 是关于如何创建自定义单元格的很好指南,您可以根据需要拥有任意数量的自定义单元格。

我过去做过很多次同样的事情。

您可以在数据中包含允许 table 出列正确类型的单元格并填充它的信息。

例如,您可能有一本类似...

的字典
[
    "type" : "Switch",
    "on" : true,
    "text" : "Allow location access"
]

现在,在您的 table 视图中,您可以打开字典中的 type 以获得正确的单元格类型。然后你可以确保开关 isOn 并将标签文本设置为 Allow location access.

当然,您需要的不仅仅是这种特殊情况,但同样的基本原则也适用。

您已经回答了您的问题。

1.You 正在从 Firebase 获取数据。那么可能 dynamic.Then 使用动态原型单元会更好。

2.So 数据不会 same.Then 为每个 type.Finally 制作单独的原型单元格 在动态数据中使用基于 'Key' 的原型单元格。

即使你的 Firebase 数据是静态的,上面的方法也是最好的。