內含: 1、對UIPickerDelegate和UIPickerDataSource的使用說明;2、使用Bundle獲取本地plist文件,解析Plist文件;3、使用SnapKit對視圖自動布局
如圖所示

import UIKit class WYSynMainViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource { // 自定義視圖 lazy var syntime_tabarView: WYCustomSynTime_Tabar = { let _tabarView = WYCustomSynTime_Tabar(frame: .zero) return _tabarView }() // pickerView lazy var syntime_pickerViwe: UIPickerView = { let pickerView = UIPickerView(frame: .zero) pickerView.delegate = self pickerView.dataSource = self return pickerView }() private var minuteArray: [String]? // 分鍾數組 private var hourArray: [String]? // 小時數組 private var mainTitle: String? // 標題 private var currentHour: String? // 被選中時,小時 private var currentMinute: String? // 被選中時,分鍾 override func viewDidLoad() { super.viewDidLoad() setDataSource() // 設置數據 setUpUI() // 設置UI aciton() // 設置自定義視圖事件回調,采用的Block } // 設置數據 private func setDataSource() { if let path = Bundle.main.path(forResource: "SynTimePlistFile", ofType: "plist") { if let _dic = NSDictionary(contentsOfFile: path) as? Dictionary<String, AnyObject> { mainTitle = _dic["title"] as? String hourArray = _dic["hour"] as? [String] minuteArray = _dic["minute"] as? [String] } } } // 設置UI private func setUpUI() { view.backgroundColor = UIColor.white navigationItem.title = "時間設置" weak var weakSelf = self guard let _weakSelf = weakSelf else{return} view.addSubview(syntime_tabarView) syntime_tabarView.snp.makeConstraints { (make) in make.left.right.bottom.equalTo(_weakSelf.view) make.height.equalTo(49) } view.addSubview(syntime_pickerViwe) syntime_pickerViwe.snp.makeConstraints { (make) in make.left.right.equalTo(_weakSelf.view) make.centerY.equalTo(_weakSelf.view) } } // 設置自定義視圖回調函數 private func aciton() { syntime_tabarView.sytimeCustomTabarButtonActionHandle = {(button) in if button.tag == 1 { } if button.tag == 2 { } } } // MARK: UIPickerViewDelegate & UIPickerViewDataSource // 設置組的數量 func numberOfComponents(in pickerView: UIPickerView) -> Int { return 3 } // 根據組下標,設置組里item的數量 func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { switch component { case 0: return 1 case 1: return 12 case 2: return 60 default: break } return 0 } // 根據組下標,設置item文字 func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { switch component { case 0: return mainTitle case 1: return hourArray?[row] case 2: return minuteArray?[row] default: break } return nil } // 根據組下標返回一個視圖 // func pickerView(_ pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusing view: UIView?) -> UIView { // // } // 當前選擇的下標 func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { switch component { case 1: currentHour = hourArray?[row] case 2: currentMinute = minuteArray?[row] default: break } } // 根據組下標或則item下標,設置字體熟悉 func pickerView(_ pickerView: UIPickerView, attributedTitleForRow row: Int, forComponent component: Int) -> NSAttributedString? { return nil } // 設置設置每組的寬度 func pickerView(_ pickerView: UIPickerView, widthForComponent component: Int) -> CGFloat { switch component { case 0: return UIScreen.main.bounds.width / 4 * 2 case 1: return UIScreen.main.bounds.width / 4 case 2: return UIScreen.main.bounds.width / 4 default: break } return 0.0 } }
