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

yizhihongxing

详解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日

相关文章

  • 免费下载!Windows 10简体中文最新预览版下载地址(另附更多语言版本)

    免费下载!Windows 10简体中文最新预览版下载地址(另附更多语言版本)攻略 Windows 10是微软最新的操作系统版本,提供了许多新功能和改进。如果你想尝试Windows 10的最新预览版,并且希望以简体中文为主要语言,下面是一个详细的攻略,告诉你如何免费下载Windows 10简体中文最新预览版,并提供了其他语言版本的下载地址。 步骤1:访问Win…

    other 2023年8月4日
    00
  • 【用户不在sudoers文件中】问题解决

    当用户在 Linux 系统中执行需要管理员权限的命令时,可能会遇到“用户不在sudoers文件中”的错误。这是因为该用户没有被授权执行 sudo 命令的权限。本文将提供两种解决问题的方法,并提供示例说明。 方法一:将用户添加到 sudoers 文件中 sudoers 文件是 Linux 系统中用于授权用户执行 sudo 命令的文件。可以通过编辑该文件,将用户…

    other 2023年5月9日
    00
  • optimization-分析时 大多数时间都花在nvoglv64.dll中。

    当进行计算机图形渲染时,有时会遇到性能问题,其中一个常见的问题是在nvoglv64.dll中花大量时间。本文将介绍如何分析和优化这个问题。 分析问题 在分析问题时,可以使用以下工具: NVIDIA Nsight NVIDIA Visual Profiler Microsoft Visual Studio 使用这些工具,可以分析GPU的使用情况,找出性能瓶颈所…

    other 2023年5月9日
    00
  • kotlin延迟初始化和密封类详细讲解

    Kotlin延迟初始化和密封类详细讲解 延迟初始化 变量初始化的必要性 在我们的编程方式中,定义变量的时候需要先为它们分配内存空间并初始化。这个过程是我们工作中必须要注意的事项之一,它可以保证变量能够正常使用。但在某些情况下,当我们希望使用某个变量时,它还没有被初始化,这时就会引发代码的运行时错误。 延迟初始化 为了解决以上问题,Kotlin中提供了延迟初始…

    other 2023年6月20日
    00
  • 基于Vue-Cli 打包自动生成/抽离相关配置文件的实现方法

    基于Vue-Cli 打包自动生成/抽离相关配置文件的实现方法 在Vue-Cli中,我们可以使用webpack来进行项目的打包和构建。为了实现自动生成或抽离相关配置文件的功能,我们可以借助webpack的插件和配置项来完成。 下面是一个详细的攻略,包含了两个示例说明。 示例一:自动生成配置文件 首先,安装copy-webpack-plugin插件,该插件可以用…

    other 2023年7月29日
    00
  • SQL Server Reporting Services 匿名登录的问题及解决方案

    实现SSRS匿名登录是一项常见的需求,但它涉及到一些默认安全限制,因此需要掌握一些技巧来处理。本文将详细讲解匿名登录的问题及解决方案。 1. 问题描述 在默认情况下,SSRS报表需要认证用户才能访问报表,这意味着,无论在本地还是在远程环境中,用户必须提供正确的凭据才能访问报表。而有些情况下,我们希望用户能够匿名访问报表而无需提供凭据。如果您尝试访问报表服务器…

    other 2023年6月26日
    00
  • 解决python递归函数及递归次数受到限制的问题

    解决 Python 递归函数及递归次数受到限制的问题有两种方法,分别为手动设置递归深度和使用尾递归。 手动设置递归深度 Python 中的默认递归深度为 1000,所以如果超出了默认深度时就会抛出递归异常。我们可以使用 sys 模块来手动设置递归深度。 import sys sys.setrecursionlimit(3000) # 修改递归深度为 3000…

    other 2023年6月27日
    00
  • json数据格式及json校验格式化工具简单实现

    当我们需要在Web应用程序中传输数据时,JSON(JavaScript Object Notation)是一种常用的轻量级数据交换格式。JSON数据格式由键值对组成,使用大括号{}表示对象,使用中括号[]表示数组。本文将为您提供JSON数据格式及JSON校验格式化工具的简单实现攻略,包括两个示例。 JSON数据格式 以下是一个JSON数据格式的示例: { &…

    other 2023年5月6日
    00
合作推广
合作推广
分享本页
返回顶部