Swift3.0 UIPickerView的使用


內含: 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
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM