Show two different custom cells in same uitableview - swift firebase

前端 未结 6 1542
心在旅途
心在旅途 2021-02-06 20:15

I am currently having a problem with displaying two different types of custom cells on the same uitableview.

What I have managed so far, is receiving the \"updates\" to

6条回答
  •  北恋
    北恋 (楼主)
    2021-02-06 20:19

    You can create a simple View Model, that will hold the multiple item types:

    enum ViewModelItemType {
       case nameAndPicture
       case about
       case email
       case friend
       case attribute
    }
    
    protocol ViewModelItem {
       var type: ViewModelItemType { get }
       var rowCount: Int { get }
       var sectionTitle: String  { get }
    }
    

    Then create a model item type for each section. For example:

    class ViewModelNameAndPictureItem: ViewModelItem {
       var type: ProfileViewModelItemType {
          return .nameAndPicture
       }
    
       var sectionTitle: String {
          return “Main Info”
       }
    
       var rowCount: Int {
          return 1
       }
    
       var pictureUrl: String
       var userName: String
    
       init(pictureUrl: String, userName: String) {
          self.pictureUrl = pictureUrl
          self.userName = userName
       }
    }
    

    Once you configure all your section items with, you can save them in ViewModel:

    class ProfileViewModel {
       var items = [ViewModelItem]()
    }
    

    And add to you TableViewController:

    let viewModel = ViewModel()
    

    In this case, NumberOfSections, NumberOfRows and CellForRowAt methods will be clean and simple:

    override func numberOfSections(in tableView: UITableView) -> Int {
          return viewModel.items.count
    }
    
    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
          return viewModel.items[section].rowCount
    }
    
    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let item = viewModel.items[indexPath.section]
        switch item.type {
              // configure celll for each type
        }
    }
    

    Configuring the section title will also be very neat:

    override func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
       return viewModel.items[section].sectionTitle
    }
    

    Please check my recent tutorial on this topic, that will answer your question with the details and examples:

    https://medium.com/ios-os-x-development/ios-how-to-build-a-table-view-with-multiple-cell-types-2df91a206429

提交回复
热议问题