Swift - PickerView

Swift - PickerView 首页 / iOS入门教程 / Swift - PickerView

Picker 是指提供多个选项集合供用户选择其中一项的控件。它是继承UIView的UIPickerView类的实例。

class UIPickerView : UIView

顾名思义,选择器视图允许用户从多个项目集中选择一个项目。 PickerView可以显示一个或多个集合,其中每个集合称为一个组件。每个组件都显示一系列代表可选项目的索引行。

    UIPickerView方法

    SNMethodDescription
    1func numberOfRows(inComponent: Int) -> Int它表示在pickerview的单个组件中显示的行数。
    2func rowSize(forComponent: Int) -> CGSize它表示iOS应用程序中指定组件的行的大小。
    3func reloadAllComponents()此函数用于重新加载选择器视图的所有组件。
    4func reloadComponent(Int)此函数用于重新加载选择器视图的特定组件。
    5func selectRow(Int, inComponent: Int, animated: Bool)此方法用于在特定选择器视图的指定组件中选择一行。
    6func selectedRow(inComponent: Int) -> Int此方法用于返回选择器视图中所选行的指定组件的索引。
    7func view(forRow: Int, forComponent: Int) -> UIView?此方法用于返回选择器视图用于给定行和组件的视图。

    UIPickerView属性

    SNPropertyDescription
    1var dataSource: UipickerviewDataSource?它代表指定选取器视图的数据源。
    2var delegate: UipickervieweEgate?它代表选择器视图的委托。
    3var numberOfComponents: Int它代表选择器视图中的组件数。

    UIPickerViewDataSource

    UIPickerViewDataSource用于使选择器视图具有组件数量以及每个组件中的行数,以显示选择器视图数据。

    无涯教程网

    SNMethodDescription
    1func numberOfComponents(in: UIPickerView) -> Int整数,该整数表示iOS的选择器视图中的组件数。
    2func pickerView(UIPickerView, numberOfRowsInComponent: Int) -> Int整数,代表特定应用程序中的行数。

    UIPickerViewDelegate

    UIPickerViewDelegate的对象必须符合UIPickerViewDelegate协议,才能定义每个组件中行的高度,宽度,行标题和视图内容。

    SNMethodDescription
    1func pickerView(UIPickerView, rowHeightForComponent: Int) -> CGFloat当需要在pickerview组件中设置行的高度时,将由picker视图调用。
    2func pickerView(UIPickerView, widthForComponent: Int) -> CGFloat当需要在pickerview组件中设置行的宽度时,由pickerview调用。
    3func pickerView(UIPickerView, titleForRow: Int, forComponent: Int) -> String?它返回一个字符串,该字符串代表pickerview组件中该行的标题。
    4func pickerView(UIPickerView, attributedTitleForRow: Int, forComponent: Int) -> NSAttributedString?当需要为pickerview组件中的任何行设置样式化标题时,它就会由pickerview调用。
    5func pickerView(UIPickerView, viewForRow: Int, forComponent: Int, reusing: UIView?) -> UIView它返回UIView的对象,该对象用于指定组件中的指定行。
    6func pickerView(UIPickerView, didSelectRow: Int, inComponent: Int)当用户在pickerview组件中选择一行时,将调用此方法。

    示例1   -  这是一个非常简单的示例,其中,无涯教程将pickerview添加到无涯教程的界面中。无涯教程将定义数据源并委托方法来设置pickeview的数据和样式。

    要为此示例创建接口构建器,无涯教程将搜索选择器视图,如下图所示。

    iOS PickerView

    下图给出了将用于该项目的完整main.storyboard,其中,无涯教程使用了标签和pickerview来选择项目。

    链接:https://www.learnfk.comhttps://www.learnfk.com/ios/ios-pickerview.html

    来源:LearnFk无涯教程网

    iOS PickerView

    ViewController.swift

    import UIKit
    
    
    class ViewController: UIViewController {
    
    
        @IBOutlet weak var pickerView: UIPickerView!
        var arr = Array<string>()
        
        override func viewDidLoad() {
            super.viewDidLoad()
           //加载视图后进行任何其他设置。
            pickerView.dataSource = self
            pickerView.delegate = self
            
            for i in 0.. Int {
            return 1
        }
        
        func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
            return arr.count
        }
        
    }
    
    
    extension ViewController : UipickervieweEgate{
        
        func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
            return arr[row]
        }
    }
    

    输出:

    iOS PickerView

    示例2   -  在此示例中,无涯教程将了解pickerview的正常函数。在这里,无涯教程创建了标签,然后创建了pickerview。每个标签都与特定组件相关联。

    在此示例中,无涯教程提示用户从选择器视图中选择时间。在这里,无涯教程将创建单独的组件和标签以显示小时,分钟和秒。从pickerview中选择适当的值后,无涯教程将更改标签的文本。

    iOS PickerView

    ViewController.swift

    import UIKit
    
    
    class ViewController: UIViewController {
    
    
        @IBOutlet weak var pickerView: UIPickerView!
        
        @IBOutlet weak var hourLbl: UILabel!
        @IBOutlet weak var minuteLbl: UILabel!
        @IBOutlet weak var secondLbl: UILabel!
        
        var hourArr = Array<string>()
        var minuteArr = Array<string>()
        var secondArr = Array<string>()
        
        override func viewDidLoad() {
            super.viewDidLoad()
           //Do any additional setup after loading the view.
            pickerView.delegate = self
            pickerView.dataSource = self
            for i in 0...23{
                hourArr.insert(i.description, at: i)
            }
            minuteArr = ["00","05","10","15","20","25","30","35","40","45","50","55"]
            secondArr = minuteArr
        }
    
    
    }
    
    
    extension ViewController : UipickervieweEgate.{
        func numberOfComponents(in pickerView: UIPickerView) -> Int {
            return 3
        }
        
        func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
        
            var numberOfRows = 0
            switch component {
            case 0:
                numberOfRows = 24
            case 1:
                numberOfRows = 12
            case 2:
                numberOfRows = 12
                
            default:
                numberOfRows = 0
                
            }
            return numberOfRows
        }
        
        func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
            var title = ""
            switch component{
            case 0:
                title = hourArr[row]
            case 1:
                title = minuteArr[row]
            case 2:
                title = secondArr[row]
            
            default:
                title = ""
            }
            return title
        }
        
        func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
            switch component {
            case 0:
                hourLbl.text = hourArr[row]
            case 1:
                minuteLbl.text = minuteArr[row]
            case 2:
               secondLbl.text = secondArr[row]
            default:
                hourLbl.text = ""
                
            }
        }
    }
    
    
    extension ViewController : UipickerviewDataSource.{
      
    }
    

    输出:

    iOS PickerView

    祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

    技术教程推荐

    Go语言核心36讲 -〔郝林〕

    代码精进之路 -〔范学雷〕

    数据分析实战45讲 -〔陈旸〕

    接口测试入门课 -〔陈磊〕

    实用密码学 -〔范学雷〕

    大数据经典论文解读 -〔徐文浩〕

    业务开发算法50讲 -〔黄清昊〕

    快手 · 移动端音视频开发实战 -〔展晓凯〕

    AI大模型企业应用实战 -〔蔡超〕

    好记忆不如烂笔头。留下您的足迹吧 :)