model與ViewModel的建立
1.model的建立
struct RootModel { let name:String let age:Int }
2.ViewModel的建立
//獲取資料
` class RootViewModel: NSObject {
func getNewsData() -> Observable<[SectionModel<String, RootModel>]> {
return Observable.create{ (observer) -> Disposable in
let array = [RootModel(name: "小明", age: 10), RootModel(name: "小亮", age: 20), RootModel(name: "333", age: 30)]
let section = [SectionModel(model: "", items: array)]
observer.onNext(section)
observer.onCompleted()
return Disposables.create()
}
}
複製程式碼
} `
3.TableViewCell的建立
`import UIKit
class RootTableViewCell: UITableViewCell {
override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
self.addSubview(nameLabel)
self.addSubview(ageLabel)
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
var model: RootModel? {
didSet {
nameLabel.text = model?.name
ageLabel.text = String(describing: model!.age)
}
}
// MARK: - 懶載入
lazy var ageLabel:UILabel = {
var ageLabel:UILabel = UILabel(frame: CGRect(x: nameLabel.bounds.origin.x + 10, y: nameLabel.bounds.size.height + 10, width: UIScreen.main.bounds.width/2, height: 20))
ageLabel.backgroundColor = UIColor.red
ageLabel.textColor = UIColor.black
return ageLabel
}()
lazy var nameLabel:UILabel = {
var nameLabel:UILabel = UILabel(frame: CGRect(x: 0, y: 0, width: UIScreen.main.bounds.size.width/2.0, height: 20))
nameLabel.textColor = UIColor.darkGray
nameLabel.textAlignment = NSTextAlignment.right
nameLabel.backgroundColor = UIColor.blue
return nameLabel
}()
複製程式碼
}
4.控制器中的具體實現
import Foundation import UIKit import RxSwift import RxCocoa import RxDataSources import Differentiator
`class TryTableViewViewController: UIViewController {
let disposeBag = DisposeBag()
// 建立DataSource
var dataSource = RxTableViewSectionedReloadDataSource<SectionModel<String,RootModel>>(configureCell: {
_, tableView, indexPath, model in
let cell = RootTableViewCell(style: .default, reuseIdentifier: "cell")
//處理返回資料
cell.model = model
return cell
})
// 建立ViewModel,獲取資料
let viewModel = RootViewModel()`
override func viewDidLoad() {
super.viewDidLoad()
// 新增View
view.addSubview(tableView)
// 獲取資料
viewModel.getNewsData().bind(to: tableView.rx.items(dataSource: dataSource)).disposed(by:disposeBag)
// Do any additional setup after loading the view.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
// MARK: - 懶載入
lazy var tableView:UITableView = {
var tableView = UITableView(frame: UIScreen.main.bounds, style: UITableViewStyle.plain)
tableView.backgroundColor = UIColor.gray;
// tableViewCell的點選事件
tableView.rx.itemSelected.map { indexPath in
return (indexPath,self.dataSource[indexPath])
}
.subscribe(onNext: { indexPath, model in
print("\(model)")
self.navigationController?.pushViewController(ViewController(), animated: true)
})
.disposed(by: disposeBag)
// 設定tableView的代理
tableView.rx.setDelegate(self)
.disposed(by: disposeBag)
return tableView
}()
複製程式碼
}'
`// 控制器的擴充套件,將tableView的一些代理在此實現
extension TryTableViewViewController : UITableViewDelegate {
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return 100;
}
複製程式碼
}`