為了在選定的物件上設定顏色,cell我執行以下操作:
armSystemTableView.rx.itemSelected.subscribe(onNext: { indexPath in
let cell = self.armSystemTableView.cellForRow(at: indexPath) as? TechnicianArmSystemTableViewCell
cell?.backgroundColor = .green
}).disposed(by: disposeBag)
雖然這有效,但它不會洗掉所有其他的選擇顏色cells,這意味著cell我每次點擊都會變成綠色。如何將所有未選擇cells的內容恢復為原始顏色?
我也嘗試過使用override func setSelected(_ selected: Bool, animated: Bool),但這不能與設定默認值一起使用,cell因為我認為setSelected會覆寫默認值:
armSystemViewModel.content.bind(to: armSystemTableView.rx.items(cellIdentifier: TechnicianArmSystemTableViewCell.identifier, cellType: TechnicianArmSystemTableViewCell.self)) {
row, data, cell in
cell.viewModel = data
if row == cell.viewModel?.parameter.value {
cell.setSelected(true, animated: false)
} else {
cell.setSelected(false, animated: false)
}
}.disposed(by: disposeBag)
這里我設定了默認的 selected cell。但這不起作用,我認為原因是它被以下內容覆寫setSelected:
override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
setSelectedColors(selected: selected)
}
func setSelectedColors(selected: Bool) {
if selected {
contentView.backgroundColor = .green
} else {
contentView.backgroundColor = .red
}
}
默認情況下應該有一個cell明顯的貪婪,但沒有。如果我洗掉setSelected并更改為設定背景顏色,它將使用默認選擇cell:
...
if row == cell.viewModel?.parameter.value {
cell.backgroundColor = .green
} else {
cell.backgroundColor = .red
}
那么我該如何實作呢?看起來很簡單:cell當您輸入view. When selecting any other cellthat cellwill instead become green and any other cellwill become red.
uj5u.com熱心網友回復:
這是一種更 Rx'ish 的方法:
items
.bind(to: tableView.rx.items) { (tableView, row, element) in
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell")!
cell.textLabel?.text = "\(element) @ row \(row)"
cell.rx.setSelected
.subscribe(onNext: { [contentView = cell.contentView] selected, animated in
contentView.backgroundColor = selected ? .green : .white
})
.disposed(by: cell.disposeBag)
return cell
}
.disposed(by: disposeBag)
您將需要定義它以使上述作業:
extension Reactive where Base: UITableViewCell {
var setSelected: Observable<(selected: Bool, animated: Bool)> {
base.rx.methodInvoked(#selector(UITableViewCell.setSelected(_:animated:)))
.map { (selected: $0[0] as! Bool, animated: $0[1] as! Bool) }
}
}
uj5u.com熱心網友回復:
我找到了一個方法。回圈所有可見cells并更改每個的顏色,然后在特定單元格上設定顏色。不是我想的最漂亮的,但它確實有效:
armSystemTableView.rx.itemSelected.subscribe(onNext: { indexPath in
self.armSystemTableView.visibleCells.forEach { $0.backgroundColor = .tableviewBackgroundColor }
let cell = self.armSystemTableView.cellForRow(at: indexPath) as? TechnicianArmSystemTableViewCell
cell?.backgroundColor = .selectedCellColor
}).disposed(by: disposeBag)
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/478327.html
