UIPickerView封装,具有多种类型"单列数据,多列不相关数据,多列相关数据,地址选择,时间选择"

ConvenientPickerView

一款方便的PickerView,通过简单的代码设置可以实现UIPickerView,无需代理设置,回收之后还会移除,可以设置有两种弹出,一种是UITextField弹出的,另一种是直接弹出.

anran.gif

如何使用ConvenientPickerView

  1. 这里使用这个PickerView最重要的是数据源,一定要是这种数据源
  let singleData = ["swift", "ObjecTive-C", "C", "C++", "java", "php", "python", "ruby", "js"]
  // 每一列为数组
  let multipleData = [["1天", "2天", "3天", "4天", "5天", "6天", "7天"],["1小时", "2小时", "3小时", "4小时", "5小时"],  ["1分钟","2分钟","3分钟","4分钟","5分钟","6分钟","7分钟","8分钟","9分钟","10分钟"]]

  // 注意这个数据的格式!
  let multipleAssociatedData: [[[String: [String]?]]] = [// 数组

  [   ["交通工具": ["陆地", "空中", "水上"]],//字典
      ["食品": ["健康食品", "垃圾食品"]],
      ["游戏": ["益智游戏", "角色游戏"]]
      
  ],// 数组
  
  [   ["陆地": ["公交车", "小轿车", "自行车"]],
      ["空中": ["飞机"]],
      ["水上": ["轮船"]],
      ["健康食品": ["蔬菜", "水果"]],
      ["垃圾食品": ["辣条", "不健康小吃"]],
      ["益智游戏": ["消消乐", "消灭星星"]],
      ["角色游戏": ["lol", "cf"]]
      
  ]
]

2.. ConvenientPickerView提供了多种类方法,我们可以通过类方法直接调用

        ConvenientPickerView.showSingleColPicker("单列数据",
                                                 data: singleData,
                                                 defaultSelectedIndex: 2) { [unowned self]
                                                    (selectIndex, selectValue) in
                                                    self.selectedLabel.text = "选中了第\(selectIndex)行----选中的数据为\(selectValue)"
        }
        ConvenientPickerView.showMultipleColsPicker("多列不关联数据",
                                                    data: multipleData,
                                                    defaultSelectedIndexs: [0,1,2]) {[unowned self] (selectedIndexs, selectedValues) in
                                                        self.selectedLabel.text = "选中了第\(selectedIndexs)行----选中的数据为\(selectedValues)"
        }
        // 注意这里设置的是默认的选中值, 而不是选中的下标,省得去数关联数组里的下标
        ConvenientPickerView.showMultipleAssociatedColsPicker("多列关联数据", data: multipleAssociatedData, defaultSelectedValues: ["交通工具","陆地","自行车"]) {[unowned self] (selectedIndexs, selectedValues) in
            self.selectedLabel.text = "选中了第\(selectedIndexs)行----选中的数据为\(selectedValues)"
        }
        // 注意设置默认值得时候, 必须设置完整, 不能进行省略 ["四川", "成都", "成华区"] 比如不能设置为["四川", "成都"]
        // ["北京", "通州"] 不能设置为["北京"]
         ConvenientPickerView.showCitiesPicker("省市区选择",
                                              defaultSelectedValues:  ["北京", "/", "/"],
                                              selectTopLevel: true) { [unowned self] (selectedIndexs, selectedValues) in
                                                // 处理数据
                                                let combinedString = selectedValues.reduce("", { (result, value) -> String in
                                                    result + " " + value
                                                })
                                                
                                                self.selectedLabel.text = "选中了第\(selectedIndexs)行----选中的数据为\(combinedString)"
        }
       ConvenientPickerView.showDatePicker("日期选择") {[unowned self] ( selectedDate) in
           let formatter = DateFormatter()
           formatter.dateFormat = "yyyy-MM-dd"
           let string = formatter.string(from: selectedDate)
           self.selectedLabel.text = "选中了的日期是\(string)"
       }

3.. ConvenientPickerView关于UITextField的弹出

        // 代码生成
        let test = PickerTextField(frame: CGRect(x: 20, y: timeTextField.frame.maxY, width: 340, height: 28))
        test.borderStyle = .roundedRect
        test.placeholder = "代码初始化"
        test.showSingleColPicker("测试代码", data: singleData, defaultSelectedIndex: 0, autoSetSelectedText: true) { [unowned self] (textField, selectedIndex, selectedValue) in
            print(selectedValue)
            self.selectedDataLabel.text = selectedValue
        }
        view.addSubview(test)
       // 使用Xib的情况:    
       @IBOutlet weak var singleTextField: PickerTextField!
       // 如果设置了autoSetSelectedText为true 将自动设置text的值, 默认以空格分开多列选择, 但你仍然可以在响应完成的closure中修改text的值
       singleTextField.showSingleColPicker("编程语言选择", data: singleData, defaultSelectedIndex: 2, autoSetSelectedText: true) {[unowned self] (textField, selectedIndex, selectedValue) in
            //  可以使用textField 也可以使用 self.singleTextField
            textField.text = "选中了第\(selectedIndex)行----选中的数据为\(selectedValue)"
            self.selectedDataLabel.text = "选中了第\(selectedIndex)行----选中的数据为\(selectedValue)"
            
        }

书写思路

  1. 我将工具栏单独封装为ToolBarView

  2. PickeView为单独的View

  3. 最后在ConvenientPickerView, PickerTextField中调用快速构建代码

总结

本文是在仿写大神的Demo,通过练习封装来提高自己的技术,这里有完成的代码,如果你觉得不错的话,给一个星星源码

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,542评论 6 504
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,822评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,912评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,449评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,500评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,370评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,193评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,074评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,505评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,722评论 3 335
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,841评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,569评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,168评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,783评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,918评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,962评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,781评论 2 354

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 172,116评论 25 707
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,103评论 4 62
  • 一个人死了所有的事情都盖棺定论了。 死的时候不能带走钱,不能带在房子,不能带走豪华的汽车,也不能带走你漂亮的炮友。...
    猫黍阅读 1,263评论 0 0
  • 月光下 心影重重叠
    谷间阅读 248评论 0 0