07/09/2018, 09:29

RxSwift: TableView và CollectionView trong RxSwift

Table View cơ bản Trường hợp điển hình, bạn muốn hiển thị một danh sách các mục cùng loại: ví dụ, một danh sách các thành phố, như bạn đã thấy trong các phần trước. Sử dụng cell bình thường để hiển thị gần như không phải thiết lập gi cả. Xem ví dụ dưới đây: @IBOutlet var tableView: ...

Table View cơ bản

Trường hợp điển hình, bạn muốn hiển thị một danh sách các mục cùng loại: ví dụ, một danh sách các thành phố, như bạn đã thấy trong các phần trước. Sử dụng cell bình thường để hiển thị gần như không phải thiết lập gi cả. Xem ví dụ dưới đây:

@IBOutlet var tableView: UITableView!
func bindTableView() {
  let cities = Observable.of(["Lisbon", "Copenhagen", "London", "Madrid",
"Vienna"])
  cities
  .bind(to: tableView.rx.items) {
      (tableView: UITableView, index: Int, element: String) in
      let cell = UITableViewCell(style: .default, reuseIdentifier:
"cell")
      cell.textLabel?.text = element
return cell }
  .disposed(by: disposeBag)
}

Và. Đó là tất cả. Bạn thậm chí không cần thiết lập UITableViewDataSource cho UIViewController. Đây là cái nhìn tổng quát về những gì đang diễn ra:

  • tableView.rx.items là một hàm binder hoạt động trên các chuỗi observable của các phần tử (giống Observable <[String]>).
  • Ràng buộc này tạo ra một đối tượng ObserverType vô hình subscribe vào sequence của bạn và set datasource, delegate cho tableView.
  • Khi một mảng mới của các phần tử truyền vào, các ràng buộc sẽ reloads tableView.
  • Để có được cell cho mỗi mục, RxCocoa gọi closure của bạn với các detail(và date) để row được reload.

Rất đơn giản để sử dụng. Nhưng nếu bạn muốn xử lý khi người dùng select thì sao? Một lần nữa, framework hỗ trợ điều này:

tableView.rx
  .modelSelected(String.self)
  .subscribe(onNext: { model in
    print("(model) was selected")
  })
  .disposed(by: disposeBag)

Phần mở rộng của modelSelected(_             </div>
            
            <div class=

0