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

相关文章

  • aceeditor

    当然,我很乐意为您提供有关Ace Editor的完整攻略。以下是详细的步骤和两个示例: 1 Ace Editor Ace Editor是一个基于Web的代码编辑器,支持多种语言和主题。它是一个轻量级的编辑器,具有快速响应和高度可定制性的特点。 2 Ace Editor的使用 以下是使用Ace Editor的方法: 2.1 引入Ace Editor 首先,需要…

    other 2023年5月6日
    00
  • 详解mybatis中的if-else的嵌套使用

    详解MyBatis中的if-else的嵌套使用 在MyBatis中,if-else语句的嵌套使用可以帮助我们根据不同的条件动态生成SQL语句。这种灵活性使得我们可以根据不同的情况来构建查询条件,从而提高查询的灵活性和可复用性。 基本语法 在MyBatis中,if-else语句的嵌套使用可以通过使用<if>和<choose>标签来实现。…

    other 2023年7月27日
    00
  • lm&&ntlm&&ophcrack&&rainbowtable

    lm&&ntlm&&ophcrack&&rainbowtable攻略 lm、ntlm、ophcrack和rainbowtable都是与密码破解相关的概念。本文将提供一个完整攻略,介绍这些概念的含义、使用方法和注意事项,并提供两个示例说明。 lm和ntlm lm和ntlm是Windows操作系统中使用的种密码哈希…

    other 2023年5月8日
    00
  • Python的类成员变量默认初始值的坑及解决

    这里给出一个详细的攻略来探讨Python类成员变量默认初始值的坑及解决方法。 标题 问题描述 Python中的类成员变量默认初始值是什么?如果我们没有给类成员变量赋初始值,会发生什么? 问题分析 在Python中,类成员变量可以直接在类定义的时候进行初始化赋值,例如: class Dog: def __init__(self, name: str, bree…

    other 2023年6月20日
    00
  • Java全面分析面向对象之封装

    Java全面分析面向对象之封装 封装是面向对象编程的三大特性之一,也是面向对象编程过程中最重要的概念之一。封装的思想是将对象的数据和实现方法对外隐藏起来,仅对外提供一些接口,以便于更好地保护对象的数据和实现方法,提高代码的可维护性和可复用性。 封装的优点 封装的优点主要有以下几点: 保护性:封装可以保护对象的数据和实现方法,防止外部对对象的数据和实现方法进行…

    other 2023年6月25日
    00
  • 关于r:使用mutate功能时遇到麻烦

    以下是关于“关于R:使用mutate功能时遇到麻烦”的完整攻略,包含两个示例。 背景 在R语言中,我们可以使用mutate()函数来创建新的变量或修改现有变量。然而,在使用mutate()函数时,我们可能会遇到一些麻烦,例如无法正确地创建新的变量或修改现有变量。那么,在R语言中,我们应该如何使用mutate()函数来创建新的变量或修改现有变量呢? 方法一:使…

    other 2023年5月9日
    00
  • Dart String字符串的常用方法总结概述

    Dart String字符串的常用方法总结概述 在Dart中,String字符串是一种常见的数据类型。本文总结了一些常用的Dart String字符串的操作方法,以便于开发者们在实际的开发中更好地进行字符串的处理。 字符串的拼接 在Dart中,字符串可以通过使用操作符+来进行拼接。 示例代码: String str1 = ‘hello’; String st…

    other 2023年6月20日
    00
  • CMD命令行将当前磁盘所有文件名写入到文本文件的方法

    完整攻略如下: 1. 打开CMD命令行 点击开始菜单,搜索cmd或者运行(cmd.exe),即可打开CMD命令行。 2. 切换到当前磁盘 使用CD命令切换到当前正在使用的磁盘,例如切换到E盘,命令为: E: 3. 运行dir命令,将结果输出到文本文件 使用dir命令显示当前目录下的所有文件和文件夹,命令为: dir > 文件名.txt 其中文件名.tx…

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