pickerView控件的简单使用

本文详细介绍了在Swift中如何使用系统控件PickerView,包括实现多列选择功能及回调处理等。提供了完整的自定义HomepagePickerView类代码示例,并展示了如何在ViewController中进行配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前一段时间实在是腾不出时间来弄这些东西,所以好久没上博客,都荒废了,不过我最近在用swift开发项目,估计以后就转战swift了,小伙伴们顶一下吧!

项目中遇到好多问题现在就与大家分享一下吧,今天就先说说系统的一个控件PickerView,用的不好,大神们见谅哦!

pickerView和我们经常用的tableView一样也有几个必需遵循的协议

UIPickerViewDataSource协议

func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int { }//指定pickerView的列数

func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { }//指定pickerView每列的行数

UIPickerViewDelegate协议

func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { }//当前列当前行的title

func pickerView(pickerView: UIPickerView, rowHeightForComponent component: Int) -> CGFloat {}//返回的行高

func pickerView(pickerView: UIPickerView, widthForComponent component: Int) -> CGFloat { }//每一列的宽度

func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {}//点击方法

话不多说,上代码

自定义HomepagePickerView

import UIKit

class HomepagePickerView: UIPickerView ,UIPickerViewDelegate, UIPickerViewDataSource {
    // --- init
    override init(frame: CGRect) {
        super.init(frame: frame)
        self.delegate = self
        self.dataSource = self
        self.backgroundColor = UIColor.whiteColor()
    }
    
    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
    }
    
    var dataArray = NSArray() {
        willSet(newValue) {
            self.dataArray = newValue
        }
        didSet {
            self.reloadComponent(0)
        }
    }
    var detailArray = NSArray() {
        willSet(newValue) {
            self.detailArray = newValue
        }
        didSet {
            self.reloadComponent(1)
        }
    }
    // --- 回调函数
    var onTwoComponentSelected: ((component1Text: String, component2Text: String) -> Void)?
    var onOneComponentSelected : ((component1Text: String) -> Void)?
    /// ---- UIPickerViewDelegate
    func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int {
        if self.detailArray.count != 0 {
            return 2
        }else{
            return 1
        }
    }
    func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
        
        if self.detailArray.count != 0 {
            if component == 0 {
                return dataArray.count
            }else{
                return detailArray.count
            }
        }else{
            return dataArray.count
        }
    }
    
    func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
        if self.detailArray.count != 0 {
            if component == 0 {
                return "\(dataArray[row])"
            }else{
                return detailArray[row] as? String
            }
        }else{
            return dataArray[row] as? String
        }
    }
    func pickerView(pickerView: UIPickerView, rowHeightForComponent component: Int) -> CGFloat {
        return 40
    }
    
    func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
        if self.detailArray.count != 0  {
            let str1 = dataArray[self.selectedRowInComponent(0)] as! String
            let str2 = detailArray[self.selectedRowInComponent(1)] as! String
            if let block = onTwoComponentSelected {
                block(component1Text: str1,component2Text:str2)
            }
        }else{
            let str1 = dataArray[self.selectedRowInComponent(0)] as! String
            if let block = onOneComponentSelected {
                block(component1Text: str1)
            }
        }
        
    }
    func showPickerView() {
        UIApplication.sharedApplication().keyWindow?.addSubview(self)
    }
}
ViewController.swift中调用


override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        setPickerView()
    }
    func setPickerView() {
        let pickerView = HomepagePickerView.init(frame: CGRectMake(0, self.view.frame.size.height - 200, self.view.bounds.size.width, 200))
        pickerView.dataArray = ["wet","ery","sdg","sag","dsfh"]
        pickerView.detailArray = ["214","346"]
        self.view.addSubview(pickerView)
        //当detailArray != nil的时候
        pickerView.onOneComponentSelected = { (component1Text: String) in
            print(component1Text)
        }

     //当detailArray == nil的时候  
     pickerView.onTwoComponentSelected = { (component1Text: String, component2Text: String) in
            
            print(component1Text)
            print(component2Text)
        }
    }



代码下载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值