我在我的应用程序中使用RxSwift来填充tableview。目前数据已成功显示。现在我想在单元格点击上更改单元格高度..这是我正在进行单元格点击。
_ = dataTable.rx.itemSelected
.subscribe(onNext: { [weak self] indexPath in
// let cell = self?.dataTable.cellForRow(at: indexPath) as? TradebookMyRequestCell
if (self?.btnMyRequest.isSelected)!{
print("index Path \(Int(indexPath.row)) =")
if self?.selectedCellIndexPath != nil && self?.selectedCellIndexPath == indexPath {
// selectedCellIndexPath = nil
self?.cellTapped = true
} else {
self?.selectedCellIndexPath = indexPath
self?.cellTapped = false
}
self?.dataTable.beginUpdates()
let selectedRowIndex = indexPath
self?.currentRow = selectedRowIndex.row
if !(self?.indexPaths.contains((self?.selectedCellIndexPath!)!))!{
self?.indexPaths.append((self?.selectedCellIndexPath!)!)
}
else {
let index = self?.indexPaths.index(of: (self?.selectedCellIndexPath!)!)
self?.indexPaths.remove(at: index!)
}
self?.dataTable.reloadRows(at: [indexPath], with: .fade)
self?.dataTable.endUpdates()
}
}).disposed(by: disposeBag)
这是细胞高度变化的代码
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
// cell = nil.
if btnMyRequest.isSelected {
if indexPaths.contains(indexPath) {
cellTapped = true
return 120
}
else {
cellTapped = false
return 70
}
}else{
return 76
}
}
问题是当我点击单元格时,首先调用heightforrow方法,然后触发我的单元格点击操作。由于我是rx的新手,任何人都可以告诉我我做错了什么? 感谢。
答案 0 :(得分:1)
我必须处理这个问题。我的解决方案如下;为您的商品添加“isExpanded”属性,并在用户点击单元格时切换该属性。
$redact
tableView.rx.itemSelected.subscribe(onNext: toggleCell).disposed(by: disposeBag)
函数看起来像这样
toggleCell
UITableView的委托看起来像这样
func toggleCell(_ indexPath: IndexPath) {
tableView.beginUpdates()
let element = dataSource[indexPath]
element.isExpanded = !element.isExpanded
tableView.reloadRows(at: [indexPath], with: .automatic)
tableView.endUpdates()
}
我希望这会对你有所帮助。