RegionSelector(地区选择器)

简介

JavaShop IOS端地区选择器,最高支持四级地区选择,可定制性强,可随意切换UI配色,图标等

使用示例

        //首先使用build方法构建RegionSelector,泛型传入自定义地区Model 自定义地区Model必须实现RegionIInter协议
        RegionSelector<RegionListBean>.build()
            //开启数据引擎
            .setDataEngine {[weak self] (data, dataSource) in
                //这里使用MoYa与RxSwift访问网络地区数据,当data为nil时 代表当前RegionSlector没有地区数据 
                // 立即执行初始化加载,在这里当parentId为0时加载一级地区数据。
                // data不为零时 根据data的地区id作为parentId获取下级地区数据
                regionApi.request(.get(parentId:  data == nil ? 0 :(data?.getId())!))
                    .subscribeOn(ConcurrentDispatchQueueScheduler(qos: .userInteractive))
                    .observeOn(MainScheduler.instance)
                    .filterSuccessfulStatusCodes()
                    .mapInstance(RegionData.self)
                    .subscribe(onSuccess: { (datas) in
                        dataSource(datas.data!)
                    }, onError: { (error) in
                        Log.error(error)
                    }).addDisposableTo((self?.disposeBag)!)
              //添加结果回调监听      
            }.setResultListener { (result) in
                Log.info(result.toString())
              //显示RegionSelector
              .show(vc : self)

         //自定义地区Model示例,HandyJSON是JSON反序列化对象的需要的协议 不使用JSON反序列化不需要实现

         struct RegionData: HandyJSON {

             var result : Int? = 0
             var message:String? = ""
             var data :[RegionListBean]? = [RegionListBean]()

        }

         struct RegionListBean :HandyJSON , RegionIInter{

             var region_id :Int = 0
             var local_name:String = ""
             var region_grade:Int = 0
             var p_region_id:Int = 0
             var childnum:Int = 0
             var cod:String = ""
             var zipcode:String = ""

             func getLevel() -> RegionLevel {
                switch region_grade {
                 case 1:
                    return RegionLevel.FIRST
                 case 2:
                    return RegionLevel.SECOND
                 case 3:
                    return RegionLevel.THIRD
                 case 4:
                    return RegionLevel.FOURTH
                 default:
                    return RegionLevel.ERROR
                }
            }

            func getName() -> String {
                return local_name
            }

            func getId() -> Int {
                return region_id
            }
        }

常用方法

results matching ""

    No results matching ""