详解iOS开发中UIPickerView控件的使用方法

详解iOS开发中UIPickerView控件的使用方法

简介

UIPickerView是iOS中常用的一种UI控件,用于显示一组可选的数据,并让用户从中选择一个。它通常是作为表单中的一部分,用于选择日期、时间、地址、性别等选项。本篇文章将详细介绍UIPickerView的使用方法。

基本用法

1. 创建UIPickerView对象

可以通过代码或xib/storyboard方式创建UIPickerView对象。以下是代码方式创建UIPickerView的方法:

UIPickerView *pickerView = [[UIPickerView alloc] initWithFrame:CGRectMake(0, 100, self.view.frame.size.width, 216)];

2. 设置数据源

要让UIPickerView显示数据,需要设置数据源。数据源有两个部分,一部分是指定UIPickerView有多少列,另一部分是指定每列有多少行数据。数据源需要实现UIPickerViewDataSource协议中的两个方法:

// 返回UIPickerView的列数
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView;

// 返回指定列的行数
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component;

以下是一个示例:

// 数据源
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {
    return 2; // 两列数据
}

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {
    if (component == 0) {
        return 3; // 第一列三行数据
    } else {
        return 5; // 第二列五行数据
    }
}

3. 设置代理

要获取用户的选择结果以及自定义UIPickerView的外观,需要设置代理。代理需要实现UIPickerViewDelegate协议中的一些方法,例如:

// 返回指定列、行对应的视图,一般是UILabel
- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(nullable UIView *)view;

// 当用户选择一行时触发,可以在这里获取用户选择结果
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component;

以下是一个示例:

// 代理
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {
    if (component == 0) {
        return [NSString stringWithFormat:@"数据1 %ld", (long)row];
    } else {
        return [NSString stringWithFormat:@"数据2 %ld", (long)row];
    }
}

- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {
    NSLog(@"用户选择了第%ld列,第%ld行。(%@)", (long)component, (long)row, [self pickerView:pickerView titleForRow:row forComponent:component]);
}

4. 显示UIPickerView

将UIPickerView添加到视图中即可显示:

[self.view addSubview:pickerView];

示例1:选择日期

以下是一个用UIPickerView实现选择日期的示例:

@interface ViewController ()<UIPickerViewDataSource, UIPickerViewDelegate>

@property (strong, nonatomic) UIPickerView *pickerView;

@property (strong, nonatomic) NSArray *years;
@property (strong, nonatomic) NSArray *months;
@property (strong, nonatomic) NSArray *days;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    // 创建UIPickerView对象
    self.pickerView = [[UIPickerView alloc] initWithFrame:CGRectMake(0, 100, self.view.frame.size.width, 216)];
    self.pickerView.dataSource = self; // 设置数据源
    self.pickerView.delegate = self; // 设置代理
    [self.view addSubview:self.pickerView];

    // 初始化数据
    self.years = @[@"2020", @"2021", @"2022"];
    self.months = @[@"01", @"02", @"03", @"04", @"05", @"06", @"07", @"08", @"09", @"10", @"11", @"12"];
    self.days = @[@"01", @"02", @"03", @"04", @"05", @"06", @"07", @"08", @"09", @"10",
                  @"11", @"12", @"13", @"14", @"15", @"16", @"17", @"18", @"19", @"20",
                  @"21", @"22", @"23", @"24", @"25", @"26", @"27", @"28", @"29", @"30", @"31"];
}

#pragma mark - UIPickerViewDataSource

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {
    return 3; // 年、月、日三列
}

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {
    if (component == 0) {
        return self.years.count;
    } else if (component == 1) {
        return self.months.count;
    } else {
        return self.days.count;
    }
}

#pragma mark - UIPickerViewDelegate

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {
    if (component == 0) {
        return self.years[row];
    } else if (component == 1) {
        return self.months[row];
    } else {
        return self.days[row];
    }
}

#pragma mark - 用户点击“确定”按钮

- (IBAction)buttonTapped:(id)sender {
    NSString *year = self.years[[self.pickerView selectedRowInComponent:0]];
    NSString *month = self.months[[self.pickerView selectedRowInComponent:1]];
    NSString *day = self.days[[self.pickerView selectedRowInComponent:2]];
    NSString *date = [NSString stringWithFormat:@"%@-%@-%@", year, month, day];
    NSLog(@"%@", date);
}

@end

在该示例中,我们创建了一个用于选择日期的UIPickerView,包含了三列数据分别表示年、月、日。并在“确定”按钮被点击时获取了用户的选择结果。

示例2:选择性别

以下是一个用UIPickerView实现选择性别的示例:

@interface ViewController ()<UIPickerViewDataSource, UIPickerViewDelegate>

@property (strong, nonatomic) UIPickerView *pickerView;

@property (strong, nonatomic) NSArray *sexList;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    // 创建UIPickerView对象
    self.pickerView = [[UIPickerView alloc] initWithFrame:CGRectMake(0, 100, self.view.frame.size.width, 216)];
    self.pickerView.dataSource = self; // 设置数据源
    self.pickerView.delegate = self; // 设置代理
    [self.view addSubview:self.pickerView];

    // 初始化数据
    self.sexList = @[@"男", @"女"];
}

#pragma mark - UIPickerViewDataSource

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {
    return 1;
}

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {
    return self.sexList.count;
}

#pragma mark - UIPickerViewDelegate

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {
    return self.sexList[row];
}

#pragma mark - 用户点击“确定”按钮

- (IBAction)buttonTapped:(id)sender {
    NSString *sex = self.sexList[[self.pickerView selectedRowInComponent:0]];
    NSLog(@"%@", sex);
}

@end

在该示例中,我们创建了一个用于选择性别的UIPickerView,包含了一列数据。并在“确定”按钮被点击时获取了用户的选择结果。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解iOS开发中UIPickerView控件的使用方法 - Python技术站

(0)
上一篇 2023年6月20日
下一篇 2023年6月20日

相关文章

  • php 静态属性和静态方法区别详解

    PHP 静态属性和静态方法区别详解 1. 静态属性 静态属性是属于类的属性,不属于类的实例对象。它可以在类内部定义,并且通过self::或类名::的方式访问,而不需要实例化类。 静态属性的主要特点包括:- 所有实例对象共享同一个静态属性的值。- 静态属性可以在类内外使用,且所有实例对象和类都可以访问。- 静态属性可以在类外直接使用,通过类名::$静态属性名的…

    other 2023年6月28日
    00
  • java中数组的应用及方法

    Java中数组的应用及方法 什么是数组 在Java中,数组(Array)是一种数据结构,可以用来存储一组相同类型的数据。数组的编号从0开始,因此第一个元素的编号是0,第二个元素的编号是1,以此类推。数组长度是在定义数组时指定的,且不可修改。数组可以是一维的,也可以是多维的。 数组的定义 定义一个数组需要指定数组的类型、名称和长度。如下是定义一个长度为3的整型…

    other 2023年6月25日
    00
  • Win10一周年更新预览版14393推送累计更新补丁KB3176934

    Win10一周年更新预览版14393推送累计更新补丁KB3176934攻略 简介 Win10一周年更新预览版14393是Windows 10操作系统的一个重要更新版本。推送的累计更新补丁KB3176934是为了修复一些已知问题和提升系统性能而发布的。本攻略将详细介绍如何安装和应用该补丁。 步骤 步骤一:检查系统版本 首先,确保你的系统版本是Win10一周年更…

    other 2023年8月3日
    00
  • 深入解析Java的设计模式编程中的模板方法模式

    深入解析Java的设计模式编程中的模板方法模式 模板方法模式是一种行为设计模式,在Java程序中被广泛地使用,它将一个算法的步骤定义为一组抽象方法,具体实现则由子类来完成。这种模式提供了在框架方法级别上的灵活性,并且允许不同的算法使用相同的框架。 什么是模板方法模式 模板方法模式是一种行为设计模式,它允许我们为实现算法的关键步骤定义一个模板骨架,并允许子类通…

    other 2023年6月27日
    00
  • idea部署nodejs项目

    IDEA部署NodeJS项目 在这篇文章中,我们将介绍如何在IntelliJ IDEA上部署Node.js项目。 什么是Node.js? Node.js是基于Chrome V8 JavaScript引擎构建的JavaScript运行时。它允许开发者使用JavaScript编写服务器端代码,并使用同一种语言编写客户端和服务器端代码。Node.js带来了许多好处…

    其他 2023年3月28日
    00
  • jquery自定义属性(类型/属性值)

    介绍 jQuery是一款广泛使用的JavaScript库,它简化了HTML文档遍历、事件处理、动画效果和AJAX等操作。在jQuery中,可以为HTML元素添加自定义属性。自定义属性包含两个部分:属性类型和属性值。属性类型和属性值在编程时需要用到,它们有助于进行一些动态操作。 属性类型 在jQuery中,可以使用自定义属性类型为各种HTML元素添加额外的特性…

    other 2023年6月25日
    00
  • 如何快速制作app应用软件

    当制作一个app应用软件时,以下是一些需要考虑和遵循的步骤: 1.明确目标和用户 在开始制作app之前,需要明确制作app的目标和用户。这将有助于你了解需要包含哪些功能以及如何为用户提供最佳的使用体验。 例如,假设你要开发一个订餐app,那么你需要考虑以下问题: 用户能否浏览菜单? 用户能否下订单? 用户能否支付订单? 用户能否跟踪订单状态? 关于目标和用户…

    other 2023年6月25日
    00
  • vue父子组件传参方式

    Vue 父子组件传参方式 在 Vue 中,组件的通信是非常重要的。父子组件是两个比较常见的组件角色,如何在父组件和子组件之间传递数据呢? 本文将探讨 Vue 中父子组件传参的几种方式,包括:props、$emit 和 provide/inject。 Props Props 是一种父组件向子组件传递数据的方式。在子组件中通过 props 定义属性,来声明要接收…

    其他 2023年3月28日
    00
合作推广
合作推广
分享本页
返回顶部