在UITableViewCell的不同类之间切换

时间:2018-05-04 12:06:09

标签: ios swift uitableview

我有两个数据源,我的表中有两个不同的自定义单元类。 我想通过按一个按钮在源和类之间切换并相应地更新我的UITableView。

不幸的是,只有一次我从一组切换到另一组。它不会返回。

希望我的代码有助于解释我的意思:

var displayMode : Int = 1

 @objc func tappedButton(_ sender: UIButton?) {
        if displayMode == 1 {
          displayMode = 2
          myTable.reloadData()
        } else {
            displayMode = 1
          myTable.reloadData()
        } 
    }

override func tableView(tableView: UITableView, 
  cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

  if displayMode == 1  {    
  let cell = tableView.dequeueReusableCellWithIdentifier(cellId,
             forIndexPath: indexPath) as! Class1

  cell.taskTitle.text = source1.text


  return cell
  } 

  else {

  let cell = tableView.dequeueReusableCellWithIdentifier(cellId,
             forIndexPath: indexPath) as! Class2

  cell.taskTitle.text = source2.text


  return cell

  } 
}

我应该在更改模式之前删除表格单元格吗?

2 个答案:

答案 0 :(得分:2)

您在

中使用相同的cellID
let cell = tableView.dequeueReusableCellWithIdentifier(cellId,
         forIndexPath: indexPath) as! Class1

let cell = tableView.dequeueReusableCellWithIdentifier(cellId,
         forIndexPath: indexPath) as! Class2

两个不同的类别(2个不同的IDS)应该是两个不同的单元格

答案 1 :(得分:1)

1)您需要为单元格创建2个单独的类:

class FirstCellClass: UITableViewCell {}

class SecondCellClass: UITableViewCell {}

2)然后注册单元格(或在Storyboard中添加单元格):

tableView.register(FirstCellClass.self, forCellReuseIdentifier: String(describing: FirstCellClass.self))
tableView.register(SecondCellClass.self, forCellReuseIdentifier: String(describing: SecondCellClass.self))

3)检查显示模式并返回cellForRowAtIndexPath中的特定单元格numberOfRowsInSection和项目计数:

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    switch displayMode {
    case .first:
        return firstDataSource.count
    case .second:
        return secondDataSource.count
    }
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    switch displayMode {
    case .first:
        let cell = tableView.dequeueReusableCell(
            withIdentifier: String(describing: FirstCellClass.self),
            for: indexPath
        ) as! FirstCellClass
        configureFirstCell(cell)
        return cell
    case .second:
        let cell = tableView.dequeueReusableCell(
            withIdentifier: String(describing: SecondCellClass.self),
            for: indexPath
        ) as! SecondCellClass
        configureSecondCell(cell)
        return cell
    }
}