swift 简单封装UIPickerView

封装思路

UIPickerView是大家常用的控件,所以简单封装了一下,支持多行,用法也超级简单,一句话集成,HanPickerView.shared?.show(dataArray:[storeTypeTitleArray])
HanPickerView.shared?.hanSureBtnBlock = {(arr) in }
注:是数组到数组,这样可以达到分区的效果。

全部代码如下:

import UIKit

class HanPickerView: UIView {

    //typedef
    typealias HanSureBtnBlock=(_ dataArr:[String])->Void
    //声明闭包
    var hanSureBtnBlock:HanSureBtnBlock?
    var array:[Any] = []
    var titleArray:[String] = []
    
    static var shared:HanPickerView? = HanPickerView(){
        didSet{
            if shared == nil{
                shared = HanPickerView()
            }
        }
    }

   
    
    func show(dataArray:Array<Any>)  {
        
        self.array = dataArray
        
        self.titleArray.removeAll()
        for _ in 0...(self.array.count){
            self.titleArray.append("")
        }
        if dataArray.count > 0 {
            let arr:[Any] = dataArray[0] as! Array
            let t:String = arr[0] as! String
            self.titleArray[0] = t;
        }
        
        let rootRect = UIApplication.shared.windows.first?.frame   //应用屏幕大小
        let container = UIView()   //全屏且透明,盖在最上面, 可以自定义点击事件, 从而实现模态和非模态框效果。
        container.backgroundColor = UIColor(hue: 0, saturation: 0, brightness: 0, alpha: 0.3)
        container.frame = rootRect!
        
        let whiteView = UIView.init(frame: CGRect.init(x: 0, y: SCREEN_HEIGHT * 0.65, width: SCREEN_WIDTH , height: SCREEN_HEIGHT * 0.35))
        whiteView.backgroundColor = UIColor.white
        
        
        let topView = UIView.init(frame: CGRect.init(x: 0, y: 0, width: SCREEN_WIDTH, height: whiteView.frame.size.height * 0.2))
        topView.backgroundColor = BG_COLOR
        whiteView.addSubview(topView)
        
        
        let cancelBtn = UIButton.init(frame: CGRect.init(x: 0, y: 0, width: topView.width * 0.3, height: topView.height))
        cancelBtn.setTitleColor(.black, for: .normal)
        cancelBtn.setTitle(LanguageHelper.getString(key: "public_cancel"), for: .normal)
        cancelBtn.addTarget(self, action: #selector(cancelBtnClicked), for: .touchUpInside)
        topView.addSubview(cancelBtn)
        
        let sureBtn = UIButton.init(frame: CGRect.init(x: topView.width * 0.7, y: 0, width: topView.width * 0.3, height: topView.height))
        sureBtn.setTitleColor(.black, for: .normal)
        sureBtn.setTitle(LanguageHelper.getString(key: "PickerView_confirmTitle_button"), for: .normal)
        sureBtn.addTarget(self, action: #selector(sureBtnClicked), for: .touchUpInside)
        topView.addSubview(sureBtn)
        
        
        let pickView = UIPickerView.init(frame: CGRect.init(x: 0, y: whiteView.frame.size.height * 0.2, width: SCREEN_WIDTH, height: whiteView.frame.size.height * 0.8))
        pickView.delegate = self
        pickView.dataSource = self
        whiteView.addSubview(pickView)
        
        container.addSubview(whiteView)
        
        UIApplication.shared.keyWindow?.addSubview(container)
    }
    
    @objc func cancelBtnClicked() {
        UIApplication.shared.keyWindow?.subviews.last?.removeFromSuperview()
        HanPickerView.shared = nil
    }
    
    @objc func sureBtnClicked() {

        hanSureBtnBlock!(self.titleArray)
        UIApplication.shared.keyWindow?.subviews.last?.removeFromSuperview()
        HanPickerView.shared = nil
       
    }
    
    func hide() {
        UIApplication.shared.keyWindow?.subviews.last?.removeFromSuperview()
        HanPickerView.shared = nil
    }
    
}
extension HanPickerView:UIPickerViewDelegate,UIPickerViewDataSource{
    func numberOfComponents(in pickerView: UIPickerView) -> Int {
        return self.array.count
    }
    
    func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
        let arr:[Any] = self.array[component] as! Array
        return arr.count
    }
    
    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
        let arr:[Any] = self.array[component] as! Array
        let t:String = arr[row] as! String
        return t
    }
    
    func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
        let arr:[Any] = self.array[component] as! Array
        let t:String = arr[row] as! String
        self.titleArray[component] = t
    }
    
}

猜你喜欢

转载自blog.csdn.net/weixin_34204057/article/details/87237266