使用RxSwift在单元格点击上更改单元格高度

时间:2018-01-23 04:33:17

标签: ios11 swift4 rx-swift

我在我的应用程序中使用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的新手,任何人都可以告诉我我做错了什么? 感谢。

1 个答案:

答案 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()
}

我希望这会对你有所帮助。