如何为每个TableViewCell添加具有不同重复次数的多个TableViewCell

时间:2018-03-20 21:20:36

标签: ios swift uitableview

我的TableView里面有3个TableViewCell。

  • 第一个TableViewCell有:Label
  • 第二个TableViewCell具有:TextField
  • 第三个TableViewCell有:Button

我的问题是你希望每个人都有不同的重复次数。

例如,我希望我的第一个tableViewCell重复3次,第二个tableViewCell重复2次,第三个tableViewCell重复2次。

TableView将是这样的:

  1. 标签
  2. 标签
  3. 标签

  4. 的TextField

  5. 的TextField

  6. 按钮

  7. 按钮
  8. 我的代码:

    import UIKit
    
    class FilterPage: UIViewController, UITableViewDelegate,UITableViewDataSource {
        @IBOutlet weak var tableView: UITableView!
        override func viewDidLoad() {
            super.viewDidLoad()
    
            tableView.delegate = self
            tableView.dataSource = self
        }
    
        func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
            return 3
        }
    
        func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
            if indexPath.row == 0 {
                let PropertTypeCell = tableView.dequeueReusableCell(withIdentifier: "PropertyTypeCell")
                 return PropertTypeCell!
            }  else if indexPath.row == 1{
                let PriceCell = tableView.dequeueReusableCell(withIdentifier: "PriceCell")
                return PriceCell!
            }
            else{
                let RoomCell = tableView.dequeueReusableCell(withIdentifier: "RoomCell")
                return RoomCell!
            }
        }
    }
    

1 个答案:

答案 0 :(得分:0)

对于这种情况我喜欢创建一个CellTypes数组,我在这种情况下定义一个枚举类型CellType

enum CellType {
    case PropertyTypeCell
    case PriceCell
    case RoomCell
}

然后在一个方法中,如果你想要动态,我填充一个CellType数组,在你的情况下,你可以使用像这样的初始化

var cellTypes : [CellType] = [.PropertyTypeCell,.PropertyTypeCell,.PropertyTypeCell,.PriceCell,.PriceCell,.RoomCell,.RoomCell]

在此之后,您可以使用numberOfRowsInSection方法返回

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

    return self.cellTypes.count
}

最重要的是你可以忘记IndexPath的噩梦,只能得到CellType当前的那个你可以做这样的事情

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let celltype = self.cellTypes[indexPath.row]
    switch celltype {
    case .PropertyTypeCell:
        let PropertTypeCell = tableView.dequeueReusableCell(withIdentifier: "PropertyTypeCell")
        return PropertTypeCell!
    case .PriceCell:
        let PriceCell = tableView.dequeueReusableCell(withIdentifier: "PriceCell")
        return PriceCell!
    default:
        let RoomCell = tableView.dequeueReusableCell(withIdentifier: "RoomCell")
        return RoomCell!

    }
}

此方法允许您更改表结构而不触摸您的cellForRowAtIndexPath方法,并且不考虑您的indexpaths.rows数字,这可能非常棘手