我们如何处理多类型UITableViewCell

时间:2017-12-04 07:09:53

标签: ios swift uitableview

我有多个类型单元格显示在UITableView

我在UITableView中有五种类型的单元格。所有单元格根据不同的服务响应数据显示,如果服务数据为零或空,则我们不需要显示单元格。所以我如何检查行数并根据服务响应显示单元格。

5 个答案:

答案 0 :(得分:1)

Swift 3

假设你有一个 tableView ,它有两种类型的单元格。 indexPath.row == 0 会显示标题单元格&其余的细胞是信息持有者细胞。为此,您需要执行以下操作

extension YourControllerName: UITableViewDelegate, UITableViewDataSource {


      func numberOfSections(in tableView: UITableView) -> Int {
         return 1
      }

      func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

         return yourDataHolderArray.count
      }

      func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        // Specify the height of cell if the cells height are different 
        if indexPath.row == 0 {
            return 30.0 
        }
        return 80.0
      }

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

        if yourDataHolderArray.count > 0 {

            if indexPath.row == 0 {

                let cell = tableView.dequeueReusableCell(withIdentifier: "Cell1", for: indexPath) as! YourHeaderCell

                return cell
            }
            else {

                let cell = tableView.dequeueReusableCell(withIdentifier: "Cell2", for: indexPath) as! YourInfoCell

                return cell
            }
        }
        return UITableViewCell()
    }
}

希望它有所帮助。

答案 1 :(得分:0)

如果您提供了回复,问题可以得到更好的解答。但是对于通用方法,您可以将numberOfSections方法与numberOfRows方法结合使用。

使用responseData的计数配置numberOfSections方法。如果有可用于该部分的数据,您还可以在每个部分中指定numberOfRows。

答案 2 :(得分:0)

您可以在数组中插入类型..以及tableView

的cellforRow函数
if type == 1{ 
  // your first cell code
   }
else if type == 2
{
//your second cell
}

等等......

答案 3 :(得分:0)

首先接收ResponseDataSet并调用tableView.reloadData()

然后

  1. 部分代表的数量将返回部分的数量

    func numberOfSections(in tableView: UITableView) -> Int {
    
        return 1
    }
    
  2. 委托的行数将返回每个相应部分中的行数。如果它返回0,则不会调用行委托的单元格

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    
         return responseSet?.count ?? 0  // The count of response data set
    }
    
  3. 在这里,您可以从responseSet检查每个单元格的类型,然后使用出列单元格功能创建或重用单元格。

        func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    
             var cell:UITableViewCell?
    
             if responseSet["type"] == "1" { 
                 cell = tableView.dequeueReusableCell(withIdentifier: "Cell1", for: indexPath)
             }
             else if responseSet["type"] == "2"
             {
                cell = tableView.dequeueReusableCell(withIdentifier: "Cell2", for: indexPath)
             }
             ..........
             ..........
    
             return cell
         }
    

答案 4 :(得分:0)

首先 -

func numberOfSections(in tableView: UITableView) -> Int {
        return 2
   }

第二 -

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

        if (section == 0){
            return 1
        }
        else{return 0
        }
}

第三 -

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

        if indexPath.row == 0 && indexPath.section == 0 {
            let cell = tableView.dequeueReusableCell(withIdentifier:"ImageCell") as! ImageCell

            if strfeaturedImageUrl != nil
            {
             cell.CasinoImage.sd_setImage(with:URL(string: strfeaturedImageUrl!))
            }
           return cell
        }
        else{
            let cell = tableView.dequeueReusableCell(withIdentifier:"InformationCell") as! InformationCell

     return cell
}
}