Registrar dos celdas personalizadas con RxSwift

Tengo un ViewController para conectarme a un file Xib. En este file Xib tengo una vista, y dentro de esta vista, tengo un TableView como tal

introduzca la descripción de la imagen aquí

También tengo LeftTableViewCell y RightTableViewCell que están conectados a otros files Xib.

introduzca la descripción de la imagen aquí

introduzca la descripción de la imagen aquí

Ahora quiero registrar LeftTableViewCell y RightTableViewCell en este TableView, así que, cómo hacerlo, mi código siempre no puede comstackrse.

 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. } } 

Registrarse XIBs

Use la function de logging familiar y registre cada XIB en un identificador diferente.

 tableView.register(UINib(nibName: "LeftTableViewCell", bundle: nil), forCellReuseIdentifier: "LeftCell") tableView.register(UINib(nibName: "RightTableViewCell", bundle: nil), forCellReuseIdentifier: "RightCell") 

Devuelve la celda que deseas

En la fábrica de celdas:

  1. Determine qué tipo de celda desea
  2. Crea una celda del tipo deseado
  3. devolver la celda creada y configurada

.

 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) 

captura de pantalla

necesita registrar una nueva celda como un file nib

  1. Cree la class UITableViewCell con xib
  2. luego registra tu celda en tableView

tableView.register (UINib (nibName: "CustomCell", package: nil), paraCellWithReuseIdentifier: "CustomCell")

y get la celda en cellForRowAtIndexPath

deje cell = collectionView.dequeueReusableCell (withReuseIdentifier: "CustomCell", para: indexPath) como! CustomCell