Ios 通用UITableView

Ios 通用UITableView,ios,swift,uitableview,tableviewcell,Ios,Swift,Uitableview,Tableviewcell,这是一个相当普通的问题,我已经阅读了很多答案,但我仍然想知道应该如何正确地完成它 当您有一个与iOS中的设置类似的表视图时,其中的表视图单元格具有许多不同的(按类型)单元格(一些单元格具有uiswitch,一些单元格具有UIPickerViews,有关更多详细信息,请参见UITextFields等),是否应该使用静态表视图或动态表视图?实现这一目标的最佳途径是什么 我在询问一些案例,例如,信息应该从Firebase数据库这样的后端提取 这完全取决于你的需要 如果要显示UI元素,如UITextFi

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

当您有一个与iOS中的设置类似的表视图时,其中的表视图单元格具有许多不同的(按类型)单元格(一些单元格具有
uiswitch
,一些单元格具有
UIPickerViews
,有关更多详细信息,请参见
UITextField
s等),是否应该使用
静态表视图
动态表视图
?实现这一目标的最佳途径是什么


我在询问一些案例,例如,信息应该从
Firebase
数据库这样的后端提取

这完全取决于你的需要

  • 如果要显示UI元素,如
    UITextField
    UISwitch
    等。。基于特定条件或api响应意味着您可以使用
    动态表视图
    。在动态tableView中,您可以设计具有不同标识符的多个单元格,也可以在
    nib
    中创建
    tableViewCell
  • 如果总是要显示相同的UI元素,则意味着您可以使用
    静态tableView
  • 如果您想根据firebase数据库的响应显示UI元素,可以使用
    DynamicTableView
    。然后,只有您可以控制您的流程和数据


    谢谢。

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

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

  • 带有
    开关的单元格
    (自定义)
  • 带有
    文本字段的单元格
    (自定义)
  • 常规单元格(常规)
  • 在您的
    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
        }
    }
    

    这是一个很好的指南,可以帮助您创建自定义单元格,并且可以拥有任意数量的自定义单元格。

    我以前也做过很多次同样的事情

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

    例如,你可能有一本类似于

    [
        "type" : "Switch",
        "on" : true,
        "text" : "Allow location access"
    ]
    
    现在,在表视图中,您可以打开字典中的
    类型
    ,以获得正确的单元格类型。然后,您可以确保开关
    isOn
    ,并将标签文本设置为
    允许位置访问


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

    你已经给出了问题的答案

    1.您正在从Firebase获取数据。那么它可能是动态的。那么最好使用动态的原型细胞

    2.所以数据不一样。然后为每种类型制作单独的原型单元。最后在动态数据中使用基于“键”的原型单元

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

    看看框架。