我有两个数据源,我的表中有两个不同的自定义单元类。 我想通过按一个按钮在源和类之间切换并相应地更新我的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
}
}
我应该在更改模式之前删除表格单元格吗?
答案 0 :(得分:2)
您在
中使用相同的cellIDlet 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
}
}