//
// 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(