美文网首页
Swift 街道四级地址选择 封装为Framework动态库

Swift 街道四级地址选择 封装为Framework动态库

作者: 慧煎蛋 | 来源:发表于2018-09-06 19:00 被阅读0次

使用UIPickerView实现

Xcode9及以上 Swift4

支持地址反向选中UIPickerView相应行

效果图.gif

从erea.plist读取初始显示

        //读取省份名称和内容
        NSArray.init(contentsOfFile: (Bundle(identifier: "lq150924.DCAreaSelectKit")!).path(forResource: "area", ofType: "plist")!)!.enumerateObjects { (dic, idx, stop) in
            self.arrayProvince += [dic as! NSDictionary]
        }
        //读取第一个市区名称和内容
        (arrayProvince.first!["cities"] as! NSArray).enumerateObjects { (dic, idx, stop) in
            self.arrayCity += [dic as! NSDictionary]
        }
        //读取第一个县区名称和内容
        (arrayCity.first!["areas"] as! NSArray).enumerateObjects { (dic, idx, stop) in
            self.arrayArea += [dic as! NSDictionary]
        }
        //读取第一个街道/乡镇名称
        (arrayArea.first!["streets"] as! NSArray).enumerateObjects { (dic, idx, stop) in
            self.arrayStreets += [dic as! String]
        }

地址反向确定

        let strs = seledStr.components(separatedBy: "/")//反向地址字符用/隔开
        var ints = [0, 0, 0, 0]//确定反向地址的具体省市区街道idx
        
        for iii in 0..<strs.count {
            
            switch iii {
            case 0://确定省
                NSArray.init(contentsOfFile: (Bundle(identifier: "lq150924.DCAreaSelectKit")!).path(forResource: "area", ofType: "plist")!)!.enumerateObjects { (dic, idx, stop) in
                    if (AreaSeleV.arrayProvince[idx]["state"] as! String) == strs[iii] {
                        AreaSeleV.areaPickerV.selectRow(idx, inComponent: iii, animated: false)
                        AreaSeleV.pickerView(AreaSeleV.areaPickerV, didSelectRow: idx, inComponent: iii)
                        ints[iii] = idx//刷新选中省份下标
                    }
                }
            case 1://确定市
                (AreaSeleV.arrayProvince[ints[iii-1]]["cities"] as! NSArray).enumerateObjects { (dic, idx, stop) in
                    if (AreaSeleV.arrayCity[idx]["city"] as! String) == strs[iii] {
                        AreaSeleV.areaPickerV.selectRow(idx, inComponent: iii, animated: false)
                        AreaSeleV.pickerView(AreaSeleV.areaPickerV, didSelectRow: idx, inComponent: iii)
                        ints[iii] = idx//刷新选中市区下标
                    }
                }
            case 2://确定县/区
                (AreaSeleV.arrayCity[ints[iii-1]]["areas"] as! NSArray).enumerateObjects { (dic, idx, stop) in
                    if (AreaSeleV.arrayArea[idx]["county"] as! String) == strs[iii] {
                        AreaSeleV.areaPickerV.selectRow(idx, inComponent: iii, animated: false)
                        AreaSeleV.pickerView(AreaSeleV.areaPickerV, didSelectRow: idx, inComponent: iii)
                        ints[iii] = idx//刷新选中县区下标
                    }
                }
            default://确定街道
                (AreaSeleV.arrayArea[ints[iii-1]]["streets"] as! NSArray).enumerateObjects { (dic, idx, stop) in
                    if (AreaSeleV.arrayStreets[idx]) == strs[iii] {
                        AreaSeleV.areaPickerV.selectRow(idx, inComponent: iii, animated: false)
                        AreaSeleV.pickerView(AreaSeleV.areaPickerV, didSelectRow: idx, inComponent: iii)
                    }
                }
            }

代码链接: https://pan.baidu.com/s/1dmte04uhO-7T_zG8elfQUQ 密码: kea2
Framework版: https://pan.baidu.com/s/1vvSIAjhoX2ddcNBd5Ys1hg 密码: p3q4

ps. Swift动态库如何制作及在OC项目中使用请看
https://www.jianshu.com/p/13ee670f21ac

相关文章

网友评论

      本文标题:Swift 街道四级地址选择 封装为Framework动态库

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