美文网首页
RxSwift【UITableView 分组样式实现】

RxSwift【UITableView 分组样式实现】

作者: wsj_2012 | 来源:发表于2020-08-08 13:40 被阅读0次

    本文讲解的是RxSwift UITableView的分组(一个或多个section)样式的实现

    1、工程依赖库

    podfile文件添加依赖库

      pod 'RxSwift'
      pod 'RxCocoa'
      pod 'RxDataSources'
    

    2、ViewController中添加如下代码

    //
    //  HomeViewController.swift
    //  RxSwiftDemo
    //
    //  Created by wsj_2012 on 2020/8/7.
    //  Copyright © 2020 wsj_2012. All rights reserved.
    //
    
    import UIKit
    import RxSwift
    import RxCocoa
    import RxDataSources
    
    class HomeViewController: UIViewController {
        
        let disposeBag = DisposeBag.init()
        
        let homeModel = HomeModel()
    
        lazy var tableView: UITableView = {
            let tableview = UITableView.init(frame: self.view.bounds,style: .plain)
            tableview.tableFooterView = UIView()
            tableview.register(RowViewCell.classForCoder(), forCellReuseIdentifier: "resuseID")
            tableview.rowHeight = 100
            return tableview
        }()
        
      
        // <SectionModel<String, RowModel.Row> 对象类型RowModel.Row须与Model中BehaviorRelay实例中items数组存储的数据对象类型一致
        let dataSource = RxTableViewSectionedReloadDataSource<SectionModel<String, RowModel.Row>>(
               configureCell: { (_, tv, indexPath, element) in
                    let cell = tv.dequeueReusableCell(withIdentifier: "resuseID") as? RowViewCell
                    cell?.textLabel?.text = "\(element.title!) @ row \(indexPath.row)"
                    return cell ?? RowViewCell(style: .default, reuseIdentifier: "resuseID")
               },
               titleForHeaderInSection: { dataSource, sectionIndex in
                    return dataSource[sectionIndex].model
               }
           )
    
        override func viewDidLoad() {
            super.viewDidLoad()
            title = "新闻"
            view.backgroundColor = .white
            // Do any additional setup after loading the view.
            
            setupSubViews()
            bindViewModel()
            updateData()
        }
        
        func setupSubViews() {
            view.addSubview(tableView)
        }
        
        func bindViewModel() -> Void {
            homeModel.groupItems.bind(to: tableView.rx.items(dataSource: self.dataSource)).disposed(by: disposeBag)
        }
        
        func updateData() {
            homeModel.updateGroupModels()
        }
        
    
    }
    
    

    3、ViewController中用到的HomeModel.swift类

    //
    //  HomeModel.swift
    //  RxSwiftDemo
    //
    //  Created by wsj_2012 on 2020/8/7.
    //  Copyright © 2020 wsj_2012. All rights reserved.
    //
    
    import UIKit
    import RxDataSources
    import RxRelay
    
    class HomeModel: NSObject {
           
        var groupItems = BehaviorRelay(value: [SectionModel(model: "", items: [RowModel.Row.init()])])
        
        func updateGroupModels() {
            var arr: [RowModel.Row] = []
            for i in 0...10 {
                let m = RowModel.Row(title: "标题\(i)", subTitle: "副标题\(i)")
                arr.append(m)
            }
            groupItems.accept([SectionModel(model: "Section", items: arr)])
        }
    }
    
    

    4、ViewController类中的RowViewCell

    RowViewCell.swift类自行创建,继承自UITableViewCell

    相关文章

      网友评论

          本文标题:RxSwift【UITableView 分组样式实现】

          本文链接:https://www.haomeiwen.com/subject/pxkqdktx.html