Last active
May 16, 2018 17:57
-
-
Save taichino/60d32c1edc8cd1c7582ed58497e89d72 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import UIKit | |
import RxSwift | |
import RxCocoa | |
class SimpleTableViewExampleViewController : ViewController, UITableViewDelegate { | |
@IBOutlet weak var tableView: UITableView! | |
let itemsObservable = BehaviorRelay(value: (0..<5).map { "\($0)" }) | |
@objc func add() { | |
let items = itemsObservable.value | |
addItems(["\(items.count)"]) | |
} | |
func addItems(_ newItems: [String]) { | |
let items = itemsObservable.value | |
itemsObservable.accept(items + newItems) | |
} | |
override func viewDidLoad() { | |
super.viewDidLoad() | |
navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .add, target: self, action: #selector(add)) | |
itemsObservable | |
.bind(to: tableView.rx.items(cellIdentifier: "Cell", cellType: UITableViewCell.self)) { (row, element, cell) in | |
cell.textLabel?.text = "\(element) @ row \(row)" | |
} | |
.disposed(by: disposeBag) | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import UIKit | |
import RxSwift | |
import RxCocoa | |
class SimpleTableViewExampleViewController : ViewController, UITableViewDelegate { | |
@IBOutlet weak var tableView: UITableView! | |
typealias MySectionModel = AnimatableSectionModel<String, String> | |
let sectionsObservable = BehaviorRelay(value: [MySectionModel(model: "my section", items: (0..<5).map { "\($0)" })]) | |
@objc func add() { | |
let sections = sectionsObservable.value | |
addItems(["\(sections.first!.items.count)"]) | |
} | |
func addItems(_ newItems: [String]) { | |
var sections = sectionsObservable.value | |
sections[0].items += newItems | |
sectionsObservable.accept(sections) | |
} | |
override func viewDidLoad() { | |
super.viewDidLoad() | |
navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .add, target: self, action: #selector(add)) | |
let dataSource = RxTableViewSectionedAnimatedDataSource<MySectionModel>(configureCell: { (_, tableView, indexPath, element) in | |
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell") ?? UITableViewCell(style: .default, reuseIdentifier: "Cell") | |
cell.textLabel?.text = "\(element) @ row \(indexPath.row)" | |
return cell | |
}) | |
sectionsObservable | |
.bind(to: tableView.rx.items(dataSource: dataSource)) | |
.disposed(by: disposeBag) | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import UIKit | |
import RxSwift | |
import RxCocoa | |
typealias MySectionModel = AnimatableSectionModel<String, String> | |
class MyTableViewModel { | |
let sectionsObservable = BehaviorRelay(value: [MySectionModel(model: "my section", items: (0..<5).map { "\($0)" })]) | |
@objc func add() { | |
let sections = sectionsObservable.value | |
addItems(["\(sections.first!.items.count)"]) | |
} | |
func addItems(_ newItems: [String]) { | |
var sections = sectionsObservable.value | |
sections[0].items += newItems | |
sectionsObservable.accept(sections) | |
} | |
} | |
class SimpleTableViewExampleViewController : ViewController, UITableViewDelegate { | |
@IBOutlet weak var tableView: UITableView! | |
private let viewModel = MyTableViewModel() | |
override func viewDidLoad() { | |
super.viewDidLoad() | |
navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .add, target: self.viewModel, action: #selector(MyTableViewModel.add)) | |
let dataSource = RxTableViewSectionedAnimatedDataSource<MySectionModel>(configureCell: { (_, tableView, indexPath, element) in | |
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell") ?? UITableViewCell(style: .default, reuseIdentifier: "Cell") | |
cell.textLabel?.text = "\(element) @ row \(indexPath.row)" | |
return cell | |
}) | |
viewModel.sectionsObservable | |
.bind(to: tableView.rx.items(dataSource: dataSource)) | |
.disposed(by: disposeBag) | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import UIKit | |
import RxSwift | |
import RxCocoa | |
typealias MySectionModel = AnimatableSectionModel<String, String> | |
class MyTableModel { | |
let itemsObservable = BehaviorRelay(value: (0..<5).map { "\($0)" }) | |
func add(items: [String]) { | |
var currentItems = itemsObservable.value | |
currentItems += items | |
itemsObservable.accept(currentItems) | |
} | |
} | |
class MyTableViewModel { | |
let sectionsObservable: BehaviorRelay<[MySectionModel]> | |
private let model: MyTableModel | |
private let disposeBag = DisposeBag() | |
init(model: MyTableModel) { | |
self.model = model | |
self.sectionsObservable = BehaviorRelay(value: [MySectionModel(model: "my section", items: model.itemsObservable.value)]) | |
model.itemsObservable.subscribe { [unowned self] event in | |
var sections = self.sectionsObservable.value | |
if let items = event.element { | |
sections[0].items = items | |
self.sectionsObservable.accept(sections) | |
} | |
}.disposed(by: disposeBag) | |
} | |
@objc func add() { | |
let sections = sectionsObservable.value | |
model.add(items: ["\(sections.first!.items.count)"]) | |
} | |
} | |
class SimpleTableViewExampleViewController : ViewController, UITableViewDelegate { | |
@IBOutlet weak var tableView: UITableView! | |
private let viewModel = MyTableViewModel(model: MyTableModel()) | |
override func viewDidLoad() { | |
super.viewDidLoad() | |
navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .add, target: viewModel, action: #selector(MyTableViewModel.add)) | |
let dataSource = RxTableViewSectionedAnimatedDataSource<MySectionModel>(configureCell: { (_, tableView, indexPath, element) in | |
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell") ?? UITableViewCell(style: .default, reuseIdentifier: "Cell") | |
cell.textLabel?.text = "\(element) @ row \(indexPath.row)" | |
return cell | |
}) | |
viewModel.sectionsObservable | |
.bind(to: tableView.rx.items(dataSource: dataSource)) | |
.disposed(by: disposeBag) | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment