iOS开发 —— Swift版地址选择器

已经有二十多天没有更新自己的博客了,这段时间经历了很多事情,离开了生活了六七年的杭州,从离职再入职,忙的是一塌糊涂。

现在这个公司的项目使用了Swift开发,我一直想在自己的项目中也运用Swift,但是一直也没有机会,所以这次能够使用Swift正儿八经的开发,我也是超级兴奋的。

所以从以后开始,我的iOS系列的文章会逐渐的与Swift语言越来越相关。不得不说只有实际开发才能发现Swift中等着我要去踩的坑还有很多。没辙了,爱他就拼命的去填坑吧。

刚入职的第一周写了个简单的页面来熟悉公司项目代码,并且了解下业务。做了一个电商方面相关的收货地址的选择。

今天就来讲讲Swift版本的地址选择器的构建。

构建思路

刚开始领导丢给我了一个数据库包含着中国地区的省市区关系,但是以前处理这个问题常用Plist文件来搞定,所以我也就偷懒懒得再去写Sql语句了,直接用一个Plist文件来处理。

之前OC写的很多省市选择器,都是封装的不够完善,直接调用存在很多问题。并且在处理省市联动的问题上,常常是通过拆分省市区为三个数组,当其中一个数据变化时,再根据 index来处理之后的数据联动。

所以这次的类就本着提高复用性的想法,对地址选择界面做了比较全面的封装,在之后的任何地方调用就非常方便。

首先把UIPickerView这个类的两个代理方法在自己的类里实现,以后调用的时候不用再去实现UIPickerView的两个Delegate Method,之后我们再提供一个协议,用最简单的方式来完成数据的获取。

至于省市区的结构,我们用结构体来处理,将省市区写成两个Struct,再之后就是简单的数据处理了。将数据加载并且传入这个Struct中。

最后,因为有时候不是省市区三个一起调用,有可能只是单个,或者两个。所以再用枚举声明三种类型,包括了省、省市、省市区三种情况,我想这样就可以满足所有情况的使用了。

简单调用

贴上一个简单调用的方法吧,最直接的调用,非常的简单。

class ViewController: UIViewController, LixAreaPickerDelegate {
    @IBOutlet weak var dataLabel: UILabel!
    @IBOutlet weak var subdivisionsPicker: LixAreaPickerView!

    @IBAction func selectPickerType(sender: UISegmentedControl) {
        switch sender.selectedSegmentIndex {
        case 0:
            subdivisionsPicker.pickerType = .Province
        case 1:
            subdivisionsPicker.pickerType = .City
        case 2:
            subdivisionsPicker.pickerType = .District
        default:
            break
        }
    }

    func areaPickerDidUpdate(sender: LixAreaPickerView) {
        dataLabel.text = (subdivisionsPicker.province ?? "") + " " + (subdivisionsPicker.city ?? "") + " " + (subdivisionsPicker.district ?? "")
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        subdivisionsPicker.pickerDelegate = self
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }

}

源码地址

源码我已经放在我的Github上面了,欢迎使用。 如果您觉得好用,麻烦Star,谢谢。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏木子昭的博客

<技术贴>当图虫遇到爬虫...根据”分类名称”,获取json数据根据json数据,获取图集url与title爬虫架构:运行界面:最终效果

首先,图虫网是一个很棒的图片网站,这里的爬虫只是为了研究技术,请读者朋友们,不要大量采集网站信息,爬取的图片,请取得版权后再使用... ? 图虫网 根据”分类...

3499
来自专栏星流全栈

Github开源免费编程书籍

1.5K4
来自专栏SAP最佳业务实践

SAP最佳业务实践:MM–组件收费的委外加工(251)-6开销售发票

4.7 创建出具发票凭证 创建出具发票凭证给委外加工商。 完成了对委外加工商的发货。 SAP ECC菜单Processes -Create Invoices f...

3808
来自专栏帘卷西风的专栏

编写简易斜45度地图编辑器

      最近在研究cocos2dx的地图,最开始使用的是Tiled,这个编辑器做比较小的地图还是比较强大的,不过做大地图的时候,有一些功能不太方便并且有缺陷...

1053
来自专栏Android 开发学习

音频开发ijkplayer小结 android

2152
来自专栏小灰灰

Spring之定时任务基本使用篇

文章链接:https://liuyueyi.github.io/hexblog/2018/08/01/180801-Spring之定时任务基本使用篇/

1461
来自专栏即时通讯技术

手把手教你读取Android版微信和手Q的聊天记录(仅作技术研究学习)

特别说明:本文内容仅用于即时通讯技术研究和学习之用,请勿用于非法用途。如本文内容有不妥之处,请联系JackJiang进行处理!

5602
来自专栏逍遥剑客的游戏开发

XACT基本概念

963
来自专栏杨建荣的学习笔记

dg的奇怪问题终结和分区问题答疑 (r7笔记第77天)

今天来说几个问题,一个是对昨天《让我焦灼的四个问题》的升华,不能起博眼球的题目,技术分析给大家兜底了,你们看看有没有类似的问题。 还有几个小问题说说今天的感受和...

3455
来自专栏web编程技术分享

【Java框架型项目从入门到装逼】第一节 - Spring框架 IOC的丧心病狂解说,来一波神的视角

3106

扫码关注云+社区