设为首页 加入收藏

TOP

Swift3.0 三级联动UIPickerView城市选择器(一)
2017-10-09 14:30:06 】 浏览:7518
Tags:Swift3.0 三级 联动 UIPickerView 城市 选择

  初学Swift没几天,就试着自己写了一个城市选择器,纯Swift代码。

 

  ViewController.Swift文件中:

//
//  ViewController.Swift
//  Swift demo - UIPickerView之城市选择器
//
//  Created by 柯其谱 on 17/3/11.
//  Copyright © 2017年 柯其谱. All rights reserved.
//

import UIKit

//MARK: View life cycle
class ViewController: UIViewController {
    
    /** 懒加载的城市数据源数组 */
    fileprivate lazy var cCityDataArray: [StateModel] = {
        //Plist文件路径
        let path = Bundle.main.path(forResource: "area", ofType: "plist")
        var areas: NSArray? = nil
        //读取Plist文件数组
        if let arrayPath = path {
            areas = NSArray (contentsOfFile: arrayPath)
        }
        //数组转换为模型数组
        var cityData = Array<StateModel>()
        if let areasArr = areas {
            for area in areasArr {
                let areaDic = area as! NSDictionary
                let stateModel = StateModel.init(dictionary: areaDic)
                cityData.append(stateModel)
            }
        }
        return cityData
    }()

    /** 省级数据源数组 */
    fileprivate var cStatesArr: [StateModel]? = nil
    /** 市级数据源数组 */
    fileprivate var cCitiesArr: [CityModel]? = nil
    /** 区级数据源数组 */
    fileprivate var cAreasArr: [String]? = nil
    /** 选择城市的textField */
    fileprivate let cCityTextField: UITextField? = UITextField()
    /** 选择城市的pickerView */
    fileprivate let cCityPickerView: UIPickerView? = UIPickerView()
    /** 选择城市的toolBar */
    fileprivate let cCityToolBar: UIToolbar? = UIToolbar()
    /** 选择城市的背景蒙版 */
    fileprivate let cTextFieldCoverButton: UIButton = UIButton (frame: UIScreen.main.bounds)
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        self.view.backgroundColor = UIColor(red:0.85, green:0.85, blue:0.85, alpha:1.00)
        self.setupSubviews()
        //设置数据源数组初始值
        cStatesArr = cCityDataArray
        cCitiesArr = cStatesArr?.first?.cities
        cAreasArr = cCitiesArr?.first?.areas
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

}

//MARK: Setup
extension ViewController {
    /** 设置subviews */
    fileprivate func setupSubviews() -> Void {
        self.setupTextField()
        self.setupCoverButton()
        self.setupPickerView()
        self.setupToolBar()
    }
    
    /** 设置textField */
    private func setupTextField() -> Void {
        if let cityTextField = cCityTextField {
            cityTextField.frame = CGRect (x: 50, y: 200, width: 200, height: 44)
            cityTextField.delegate = self
            cityTextField.backgroundColor = UIColor.white
            cityTextField.placeholder = "请选择城市"
            cityTextField.borderStyle = UITextBorderStyle.roundedRect
            self.view.addSubview(cityTextField)
        }
    }
    
    /** 设置背景蒙版Button */
    private func setupCoverButton() -> Void {
        cTextFieldCoverButton.addTarget(self, action: #selector(clickTextFieldCoverButton(sender:)), for: UIControlEvents.touchUpInside)
        self.view.addSubview(cTextFieldCoverButton)
        cTextFieldCoverButton.isHidden = true
    }
    
    /** 设置pickerView */
    private func setupPickerView() -> Void {
        if let cityPickerView = cCityPickerView {
            cityPickerView.delegate = self
            cityPickerView.dataSource = self
            cCityTextField!.inputView = cityPickerView
        }
    }
    
    /** 设置toolBar */
    private func setupToolBar() -> Void {
        if let cityToolBar = cCityToolBar {
            cityToolBar.frame = CGRect (x: 0, y: 0, width: 0, height: 44)
            cityToolBar.backgroundColor = UIColor.white
            
            let cancelItem = UIBarButtonItem.init(title: "取消", style: UIBarButtonItemStyle.done, target: self, action: #selector(
首页 上一页 1 2 3 下一页 尾页 1/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇在Swift3里面实现点击不同按钮播.. 下一篇switch 在什么时候可以不写default

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目