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
    }
}

 


免責聲明!

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



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