RxSwift - UITableView的简单使用

xiaoxiao2021-02-28  7

UITableView是我们经常用的一个控件,而且在开发过程中经常需要设置dataSource和delegate,然后实现相应的协议:

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { }

在学习了RxSwift之后,我们可以写更优雅的代码实现上面的功能,下面来看一个简单demo,实现一个简单的tableView列表展示简单数据

class ViewController: UIViewController { let disposeBag = DisposeBag() lazy var tableView: UITableView = { let table = UITableView() table.register(UITableViewCell.self, forCellReuseIdentifier: "Cell") return table }() override func viewDidLoad() { super.viewDidLoad() addTableView() bindTableView() } func addTableView() { view.addSubview(tableView) tableView.snp.makeConstraints { (make) in make.left.top.bottom.right.equalToSuperview() } } func bindTableView() { // 1 初始化数据源 let items = Observable.just((0...30).map {"\($0)" }) // 2 绑定数据源到tableView items.bind(to: tableView.rx.items(cellIdentifier: "Cell", cellType: UITableViewCell.self)){ (row, element, cell) in cell.textLabel?.text = "\(element)" } .disposed(by: disposeBag) // 3 设置点击事件 tableView.rx.modelSelected(String.self).subscribe(onNext: { print("tap index: \($0)") }).disposed(by: disposeBag) } }

上面代码可知,我们仅仅只需要将数据源绑定到tableView上即可,这样可以实现相同的效果,而且代码看起来更简短。

效果如下:

转载请注明原文地址: https://www.6miu.com/read-2250289.html

最新回复(0)