我有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.
}
}
答案 0 :(得分:9)
使用熟悉的寄存器功能并将每个XIB注册到不同的标识符。
tableView.register(UINib(nibName: "LeftTableViewCell", bundle: nil), forCellReuseIdentifier: "LeftCell")
tableView.register(UINib(nibName: "RightTableViewCell", bundle: nil), forCellReuseIdentifier: "RightCell")
在细胞工厂:
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)
答案 1 :(得分:-1)
您需要将新单元格注册为nib文件
tableView.register(UINib(nibName:&#34; CustomCell&#34;,bundle:nil),forCellWithReuseIdentifier:&#34; CustomCell&#34;)
并在cellForRowAtIndexPath中获取单元格
让cell = collectionView.dequeueReusableCell(withReuseIdentifier:&#34; CustomCell&#34;,for:indexPath)为! CustomCell