我有一个 ViewController
连接到一个 Xib 文件。在这个 Xib 文件中,我有一个 View ,在这个 View 中,我有一个像这样的 TableView
我还有 LeftTableViewCell
和 RightTableViewCell
连接到另一个 Xib 文件。
现在我想在这个TableView中注册LeftTableViewCell
和RightTableViewCell
,请问怎么办,我的代码总是无法编译。
class ThirdViewController: UIViewController {
@IBOutlet weak var tableView: UITableView!
let items: Variable<[String]> = Variable(["Test 2", "Test 3", "Test 1", "Test 4", "Test 5"])
let disposeBag = DisposeBag()
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
// tableView.register(LeftTableViewCell.self, forCellReuseIdentifier: LeftTableViewCell.reuseIdentifier)
// tableView.register(UINib(nibName: "LeftTableViewCell", bundle: nil), forCellReuseIdentifier: LeftTableViewCell.reuseIdentifier)
// tableView.register(UINib(nibName: "RightTableViewCell", bundle: nil), forCellReuseIdentifier: LeftTableViewCell.reuseIdentifier)
items.asObservable().bindTo(tableView.rx.items(cellIdentifier: LeftTableViewCell.reuseIdentifier, cellType: LeftTableViewCell.self)) { row, data, cell in
cell.data = data
}.addDisposableTo(disposeBag)
tableView.rx.modelSelected(String.self).subscribe { [unowned self] (event) in
switch event {
case .next(let element):
if let selectedRowIndexPath = self.tableView.indexPathForSelectedRow {
self.tableView.deselectRow(at: selectedRowIndexPath, animated: true)
}
break
default:
break
}
}.addDisposableTo(disposeBag)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
最佳答案
注册 XIB
使用熟悉的注册函数,将每个 XIB 注册到不同的标识符。
tableView.register(UINib(nibName: "LeftTableViewCell", bundle: nil), forCellReuseIdentifier: "LeftCell")
tableView.register(UINib(nibName: "RightTableViewCell", bundle: nil), forCellReuseIdentifier: "RightCell")
返回你想要的单元格
在细胞工厂中:
- 确定您想要的细胞类型
- 创建所需类型的单元格
- 返回创建和配置的cell
.
items.asObservable()
.bindTo(tableView.rx.items) { (tableView, row, element) in
let indexPath = IndexPath(row: row, section: 0)
if row % 2 == 0 { // 1
let cell = tableView.dequeueReusableCell(withIdentifier: "LeftCell", for: indexPath) as! LeftTableViewCell // 2
// Configure the cell
return cell // 3
}
else {
let cell = tableView.dequeueReusableCell(withIdentifier: "RightCell", for: indexPath) as! RightTableViewCell
// Configure the cell
return cell
}
}
.disposed(by: disposeBag)
关于ios - 使用 RxSwift 注册两个自定义单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41200481/