微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

swift-UIPickerView(选择控件)

 

import UIKit

//UIPickerView 的委托协议是 UIPickerViewDelegate,数据源是 UIPickerViewDataSource。我们需要在视图控制器中声明实现 UIPiekerViewDelegate 和 UIPickerViewDataSource 协议。
class RootViewController: UIViewController,UIPickerViewDelegate,UIPickerViewDataSource {
    var label: UILabel!
    var pickerView: UIPickerView!
    
    var pickerData:[String: [String]] = ["放假":["代码","玩游戏","泡妹子"],"旅游":["马尔代夫","火星","迪拜","月球"],"上班":["加班","不加班"]] //保存全部数据
    var pickerProvincesData: [String] = ["放假","旅游","上班"] //第一级数据
    var pickerCitiesData: [String] = ["代码","泡妹子"]//第二级数据
    
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // 创建视图
        let screen = UIScreen.main.bounds
        // 设置 根视图背景色
        self.view.backgroundColor = UIColor.white
        
 // 选择器
        let pickerViewWidth:CGFloat = 320
        let pickerViewHeight:CGFloat = 162
        self.pickerView = UIPickerView(frame: CGRect(x:0,y: 0,width: pickerViewWidth,height: pickerViewHeight))
        //因为该Controller中实现了UIPickerViewDataSource接口所以将dataSource设置成自己
        self.pickerView.dataSource = self
        //将delegate设置成自己
        self.pickerView.delegate = self
        self.view.addSubview(self.pickerView)
        
    
    
        // 添加标签
        let labelwidth:CGFloat = 200
        let labelheight:CGFloat = 21
        let labelTopView:CGFloat = 281
        self.label = UILabel(frame: CGRect(x:(screen.size.width - labelwidth)/2,y: labelTopView,width: labelwidth,height: labelheight))
        self.label.text = "Label"
        // 字体左右居中
        self.label.textAlignment = .center
        self.view.addSubview(self.label)
        
        
        // button 按钮
        let button = UIButton(type: .system)
        button.setTitle("Button",for: UIControlState.normal)
        let buttonwidth:CGFloat = 46
        let buttonheight:CGFloat = 30
        let buttonTopView:CGFloat = 379
        button.frame = CGRect(x: (screen.size.width - buttonwidth)/2,y: buttonTopView,width: buttonwidth,height: buttonheight)
        //事件
        button.addTarget(self,action: #selector(onclick(_:)),for: .touchUpInside)
        self.view.addSubview(button)
        
    }
    //设置选择框的总列数,继承于UIPickViewDataSource协议
    func numberOfComponents(in pickerView: UIPickerView) -> Int {
        return 2
    }
    //设置选择框的总行数,继承于UIPickViewDataSource协议
    func pickerView(_ pickerView: UIPickerView,numberOfRowsInComponent component: Int) -> Int {
        //总行数设置为数据源的总长度。component :为0 表示第一列,1 表示第二列
        //根据不同的数据源设置不同的个数
        if(component == 0){
            return self.pickerProvincesData.count
        }else{
            return self.pickerCitiesData.count
        }
    }
    //设置选项框各选项的内容,继承于UIPickViewDelegate协议
    func pickerView(_ pickerView: UIPickerView,titleForRow row: Int,forComponent component: Int) -> String?{
        if(component == 0){ //选择第一级数据
            return self.pickerProvincesData[row]
        }
        else{//选择第二级数据
            return self.pickerCitiesData[row]
        }
    }
    //选择控件的事件选择
    func pickerView(_ pickerView: UIPickerView,didSelectRow row: Int,inComponent component: Int) {
        if(component == 0){
            //记录用户选择的值
            let selectedProvince = self.pickerProvincesData[row] as String
            // 根据第一列选择的值,获取第二列数据
            self.pickerCitiesData = self.pickerData[selectedProvince]!
            //刷新第二列的数据源
            self.pickerView.reloadComponent(1)
            //刷新数据源后将第二组数据转到下标为0,并且开启动画效果
            self.pickerView.selectRow(0,inComponent: 1,animated: true)
        }
    }
    //设置每行选项的高度
    func pickerView(_ pickerView: UIPickerView,rowHeightForComponent component: Int) -> CGFloat {
        return 45.0
    }
    // 获取
    @objc func onclick(_ sender: AnyObject) {
        //获得2列选取值的下标
        let row1 = self.pickerView.selectedRow(inComponent: 0)
        let row2 = self.pickerView.selectedRow(inComponent: 1)
        // 根据下标获取
        let selected1 = self.pickerProvincesData[row1] as String
        let selected2 = self.pickerCitiesData[row2] as String
        //拼接值
        let title = String(format: "%@,%@",selected1,selected2)
        self.label.text = title
    }
}

 

分享图片

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐