• swift 地区选择器选中数据操作


      

      /// 地区所有数据

                let cityInfo = viewModel.allRegionSub.value

                /// 已订阅的地区数据

                let areaIds: [Int?] = viewModel.subscribeRegionSub.value.map{$0.id}

                //通过id查询选择的省和直辖市

                var chooseCities: [Children] = []

                

                areaIds.forEach { id in

                    for item in cityInfo {

                        // 省和直辖市

                        if id == item.id {

                            let tmp = item.copyobj()

                            tmp.children = []

                            chooseCities.append(tmp)

                            break

                        }else if let chi = item.children{

                            

                            /// 查询对应的市

                            if let sitem = chi.first(where: { id == $0.id })?.copyobj(){

                                // 查询省是否已加入

                                if let idx = chooseCities.firstIndex(where: { $0.id == sitem.pid }) {

                                    chooseCities[idx].children?.append(sitem)

                                }else{

                                    //  把省加入

                                    let price = item.copyobj()

                                    price.children = [sitem]

                                    chooseCities.append(price)

                                }

                                break

                            }

                        }

                    }

                }

                

                /// 省 默认都不选中

                chooseCities.forEach({

                    $0.isSelect = false

                    $0.children?.forEach({ $0.isSelect = false })

                })

                var provinceModel = chooseCities.first

                

                /// 插入全部

                for item in chooseCities {

                    let haschiled = (item.children?.count ?? 0) > 0

                    let obj = item.children?.first ?? item

                    let tmp = Children()

                    tmp.id = haschiled ? obj.pid : obj.id

                    tmp.pid = obj.pid

                    tmp.realName = item.name

                    //                tmp.isSelect = true

                    let all = Children.init(all: tmp)

                    //                if let children = item.children{

                    //                    //子集中是否有未选中的城市

                    //                    if children.map({$0.isSelect}).contains(false){

                    //

                    //                    }else{

                    //                        //全部被选中了,这个时候应该取消地区的选中状态,设置全部为选中

                    //                        item.children?.forEach{$0.isSelect = false}

                    //                        all.isSelect = true

                    //                    }

                    //                }

                    if item.children != nil{

                        item.children?.insert(all, at: 0)

                    }else{

                        item.children = [all]

                    }

                }

                

                // 设置默认选中

                if let tmp = self.selAreas {

                    if tmp.0 > 0 {

                        provinceModel = chooseCities.first(where: { $0.id == tmp.0 })

                        chooseCities.forEach { item in

                            item.children?.forEach({

                                let state = tmp.1.contains($0.id)

                                $0.isSelect = state

                            })

                        }

                    }

                }

                // 没有选择,默认选择全部

                else{

                    chooseCities.forEach { item in

                        item.children?.first?.isSelect = true

                    }

                }

                provinceModel?.isSelect = true

                

                /// 获取选中的数据

                var selareass: [Children] = []

                chooseCities.forEach { item in

                    selareass.append(contentsOf: item.children?.filter({ $0.isSelect }) ?? [])

                }

                

                ZBDropmenuManager.shared.showRegionDropMenu(with: chooseCities,provinceModel: provinceModel, type: .area, originY: originY, selectIDs: selareass) {[weak self] idx,areas,areasTotalCount in

                    guard let weakSelf = self else {return}

                    

                    if let areas = areas{

                        if areas.count == 1{

                            weakSelf.areaName.accept(areas.first?.realName ?? "订阅地区")

                        }else if areas.count == 0{

                            weakSelf.areaName.accept("订阅地区")

                            /// 如果没有地区数据

                            weakSelf.isNoneSelectRegion = true

                        }else{

                            weakSelf.areaName.accept("订阅地区(\(areasTotalCount))")

                        }

                    }else{

                        weakSelf.areaName.accept("订阅地区")

                        /// 如果没有地区数据

                        weakSelf.isNoneSelectRegion = true

                    }

                    if let area = areas?.first{

                        weakSelf.selAreas = (area.pid ?? 0 , areas!.map({ $0.id }))

                    }else{

                        weakSelf.selAreas = (0 , [])

                    }

                    let areaString: String = areas?.map({ "\($0.id ?? 0)" }).joined(separator: ",") ?? "0"

                    weakSelf.areaIdSelect.onNext(areaString)

                    viewModel.loadData(isFresh: true, isShowLoad: true)

                } cancel: {

                    sender.isSelected = false

                }

  • 相关阅读:
    C++中数字与字符串之间的转换
    关于安卓启动eclipse错误:找不到元素‘d:devices'的声明
    linux相关解压命令
    泛型
    CRUD工程师---番外篇---反射
    CRUD工程师---设计模式
    AOP切面日志
    CRUD工程师---InnoDB存储引擎
    CRUD工程师---InnoDB存储引擎2
    CRUD工程师---InnoDB存储引擎4(表)
  • 原文地址:https://www.cnblogs.com/supersr/p/15700931.html
Copyright © 2020-2023  润新知