ios - 使用 RxSwift 注册两个自定义单元格

标签 ios swift xcode uitableview rx-swift

我有一个 ViewController 连接到一个 Xib 文件。在这个 Xib 文件中,我有一个 View ,在这个 View 中,我有一个像这样的 TableView

enter image description here

我还有 LeftTableViewCellRightTableViewCell 连接到另一个 Xib 文件。

enter image description here

enter image description here

现在我想在这个TableView中注册LeftTableViewCellRightTableViewCell,请问怎么办,我的代码总是无法编译。

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")

返回你想要的单元格

在细胞工厂中:

  1. 确定您想要的细胞类型
  2. 创建所需类型的单元格
  3. 返回创建和配置的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)

screenshot

关于ios - 使用 RxSwift 注册两个自定义单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41200481/

相关文章:

ios - Swift Apple Mach-O 链接器错误

ios - 如何根据 API 类型发送带有 BODY 的 POST 或 GET 请求

ios - Microsoft ADAL 注销

objective-c - iOS 比较数组和集合

ios - 如何在 RxSwift 中将 UISwitch 绑定(bind)到 UIButton 启用?

ios - Swift Playgrounds 类 Viewcontroller 没有成员 ""?

在 textview 或标签周围快速绘制边框

ios - Xcode 8.3.2 断点不起作用

ios - Xcode On Archive 验证配置文件冲突

ios - Xcode 在尝试提交应用程序时出现奇怪的报摊错误