当前位置: 首页 > news >正文

iOS--UIPickerView学习

UIPickerView

  • 使用场景和功能
  • UIPickerView
    • 遵循代理协议和数据源协议
    • 创建对象,添加代理
    • 必须实现的代理方法
    • 非必要实现的方法
    • demo用到的其他函数
    • 提示
  • 效果展示

使用场景和功能

UIPickerView 最常见的用途是作为选项选择器,允许用户从多个选项中选择一个。UIPickerView 可以用于以滚动的方式展示大量数据,并允许用户通过滚动选择感兴趣的数据。一种很常见的用法是把各个数据以滚动的形式组成一个组合数据,比如年-月-日的日历或者时钟,以及省级-市级-区的地域 ;
这一部分的学习是参考学长的,用到了学长的plist文件 ;

UIPickerView

这个控件是iOS中自带的控件,使用方法类似于UItableview,所以就从UItableveiw的使用来分析了,这里跟着别人做了一个省级-市级-区的地域的小demo

遵循代理协议和数据源协议

#import <UIKit/UIKit.h>@interface ViewController : UIViewController <UIPickerViewDelegate, UIPickerViewDataSource>
@property (nonatomic, strong) UIPickerView* pickerview ;
@property (nonatomic, strong) NSMutableArray* provinceArray ;
@property (nonatomic, strong) NSArray* cityArray ;
@property (nonatomic, strong) NSArray* areaArray ;
@end

创建对象,添加代理

self.pickerview = [[UIPickerView alloc] initWithFrame:CGRectMake(50, 100, 300, 200)] ;//类似于tableview,需要设置代理和数据源self.pickerview.delegate = self ;self.pickerview.dataSource = self ;[self.view addSubview:self.pickerview] ;

必须实现的代理方法

//组数
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {return 3;
}
//行数
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {if (component == 0) {return [self.provinceArray count];} else if (component == 1) {return [self.cityArray count];} else {return [self.areaArray count] ;}
}

可以参考Uitableview的行和列,差不多的

非必要实现的方法

//展示的信息,可以是NSSTring,也可以是UIview
//- (NSString*)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {
//    return @"chabuduo";
//}
//

//pickerview滑动函数

  • (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {

简单常用的上面两个,还有很多其他的代理方法,可以参考UItableview;

UIPickerView 的代理方法用于处理用户的选择操作、自定义选项的外观以及其他与 UIPickerView 相关的事件。以下是一些常用的 UIPickerViewDelegate 和 UIPickerViewDataSource 协议中的代理方法:
UIPickerViewDelegate 协议中的代理方法:
pickerView(:didSelectRow:inComponent:):
当用户选择了 UIPickerView 中的某一行时调用该方法。你可以在该方法中获取选择的行和列索引,并根据需要进行相应的处理。
pickerView(
:viewForRow:forComponent:reusing:):
返回自定义 UIView 对象作为指定行和列的内容视图。你可以使用此方法自定义选项的外观,例如改变文本颜色、字体等。
pickerView(:rowHeightForComponent:):
返回指定列的行高。你可以使用此方法设置特定列的行高,以使选项在 UIPickerView 中正确显示。
UIPickerViewDataSource 协议中的代理方法:
numberOfComponents(in:):
返回 UIPickerView 中的列数(组件数)。你需要在此方法中指定需要显示的列数。
pickerView(
:numberOfRowsInComponent:):
返回指定列中的行数。你需要在此方法中指定每个列的行数,以确定每列将显示多少选项。

demo用到的其他函数

- (void)loadData {self.provinceArray = [[NSMutableArray alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"area.plist" ofType:nil]] ;self.cityArray = [[self.provinceArray objectAtIndex:0] objectForKey:@"cities"] ;self.areaArray = [[self.cityArray objectAtIndex:0] objectForKey:@"areas"] ;
}
- (UIView*)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view {UILabel* myview = nil ;myview = [[UILabel alloc] init] ;myview.textAlignment = NSTextAlignmentCenter ;myview.font = [UIFont systemFontOfSize:22] ;if (component == 0) {myview.text = [[self.provinceArray objectAtIndex:row] objectForKey:@"state"] ;} else if (component == 1) {myview.text = [[self.cityArray objectAtIndex:row] objectForKey:@"city"] ;} else {myview.text = [self.areaArray objectAtIndex:row] ;}return myview ;
}
//pickerview滑动函数
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {if (component == 0) {self.cityArray = [[self.provinceArray objectAtIndex:row] objectForKey:@"cities"] ;[self.pickerview reloadComponent:1] ;//调整各组所选的对象[self.pickerview selectRow:0 inComponent:1 animated:YES] ;if ([self.cityArray count] != 0) {self.areaArray = [[self.cityArray objectAtIndex:0] objectForKey:@"areas"] ;[self.pickerview reloadComponent:2] ;[self.pickerview selectRow:0 inComponent:2 animated:YES] ;}} else if (component == 1) {if ([self.cityArray count] != 0) {self.areaArray = [[self.cityArray objectAtIndex:row] objectForKey:@"areas"] ;[self.pickerview reloadComponent:2] ;[self.pickerview selectRow:0 inComponent:2 animated:YES] ;}} else {}
}

提示

其他没啥好说的了,因为用起来真的太像UItableview了,这里简单解释一下滑动函数的逻辑,如果滑动“省”,则更新市和区的component并其row归零;如果滑动“市”,则更新区的component并归零 ;

效果展示

在这里插入图片描述

相关文章:

iOS--UIPickerView学习

UIPickerView 使用场景和功能UIPickerView遵循代理协议和数据源协议创建对象&#xff0c;添加代理必须实现的代理方法非必要实现的方法demo用到的其他函数提示 效果展示 使用场景和功能 UIPickerView 最常见的用途是作为选项选择器&#xff0c;允许用户从多个选项中选择一个。…...

Docker安装Elasticsearch以及ik分词器

Elasticsearch 是一个分布式、RESTful 风格的搜索和数据分析引擎&#xff0c;能够解决不断涌现出的各种用例。作为 Elastic Stack 的核心&#xff0c;Elasticsearch 会集中存储您的数据&#xff0c;让您飞快完成搜索&#xff0c;微调相关性&#xff0c;进行强大的分析&#xff…...

[架构之路-254]:目标系统 - 设计方法 - 软件工程 - 软件设计 - 架构设计 - 全程概述

目录 一、软件架构概述 1.1 什么是软件架构 1.2 为什么需要软件架构设计 1.3 软件架构设计在软件设计中位置 &#xff08;1&#xff09;软件架构设计&#xff08;层次划分、模块划分、职责分工&#xff09;&#xff1a; &#xff08;2&#xff09;软件高层设计、概要设计…...

centos7上源码安装mysql--运维高级

第一步,安装必要的依赖: yum install -y cmake ncurses-devel bison gcc gcc-c make unzip libaio numactl 第二步,创建mysql用户和组: wget http://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.18.tar.gz tar zxvf mysql-5.7.18.tar.gz 第三步,下载MySQL 5.7.18 源码…...

Linux小程序之进度条

> 作者简介&#xff1a;დ旧言~&#xff0c;目前大二&#xff0c;现在学习Java&#xff0c;c&#xff0c;c&#xff0c;Python等 > 座右铭&#xff1a;松树千年终是朽&#xff0c;槿花一日自为荣。 > 目标&#xff1a;自己能实现进度条 > 毒鸡汤&#xff1a; > …...

Grafana采用Nginx反向代理

一、场景介绍 在常规操作中&#xff0c;一般情况下不会放开许多端口给外部访问&#xff0c;特别是直接 ip:port 的方式开放访问。但是 Grafana 的请求方式在默认情况下是没有任何规律可寻的。 为了满足业务需求&#xff08;后续通过 Nginx 统一一个接口暴露 N 个服务&#xf…...

Python接口自动化测试如何设计接口测试用例(详解)

简介 上篇我们已经介绍了什么是接口测试和接口测试的意义。在开始接口测试之前&#xff0c;我们来想一下&#xff0c;如何进行接口测试的准备工作。或者说&#xff0c;接口测试的流程是什么&#xff1f;有些人就很好奇&#xff0c;接口测试要流程干嘛&#xff1f;不就是拿着接口…...

Spring不再支持Java8了

在今天新建模块的时候发现了没有java8的选项了&#xff0c;结果一查发现在11月24日&#xff0c;Spring不再支持8了&#xff0c;这可怎么办呢&#xff1f;我们可以设置来源为阿里云https://start.aliyun.com/ 。 java8没了 设置URL为阿里云的地址...

Android 实现APP可切换多语言

如果是单独给app加上国际化,其实很容易,创建对应的国家资源文件夹即可,如values-en,values-pt,app会根据当前系统语言去使用对应语言资源文件,如果找不到,则使用values文件夹里的资源 但本文讲得是另外一种情况,就是app内置一个切换多语言的页面,可以给用户切换 步骤 1.添加服务…...

Redis大key与热Key

什么是 bigkey&#xff1f; 简单来说&#xff0c;如果一个 key 对应的 value 所占用的内存比较大&#xff0c;那这个 key 就可以看作是 bigkey。具体多大才算大呢&#xff1f;有一个不是特别精确的参考标准&#xff1a; bigkey 是怎么产生的&#xff1f;有什么危害&#xff1f;…...

SQL通配符字符

SQL通配符字符 通配符字符用于替代字符串中的一个或多个字符。通配符字符与LIKE运算符一起使用。LIKE运算符用于在WHERE子句中搜索列中的指定模式。 示例 返回所有以字母 a 开头的客户&#xff1a; SELECT * FROM Customers WHERE CustomerName LIKE a%; 通配符字符 符号…...

力扣 144.二叉树的前序遍历

目录 1.解题思路2.代码实现2.1获得节点数接口:2.2递归接口:2.3最终实现 1.解题思路 该题要利用前序遍历&#xff0c;将树的值存到数组中&#xff0c;所以在申请空间的时候&#xff0c;我们需要知道要申请多少空间&#xff0c;也就是要知道树到底有多少个结点&#xff0c;因此第…...

Ubuntu网络问题的解决

这里写目录标题 ubuntu 显示网络已连接&#xff0c;但是打不开浏览器&#xff1a;imagemagickimagemagick的安装imagick查看版本号imagemagick的命令介绍 ceres solver 介绍 ubuntu 显示网络已连接&#xff0c;但是打不开浏览器&#xff1a; sudo service network-manager sto…...

Git 本地服务器搭建 Windows

git 安装参考&#xff1a;Git的安装、配置、使用01【Git Bash Here命令行操作】-CSDN博客 gitLab 服务端安装及配置参考&#xff1a;Windows环境搭建 Gitlab 服务器_gitlab windows_测试工程师成长之路的博客-CSDN博客...

【数值计算方法(黄明游)】常微分方程初值问题的数值积分法:欧拉方法(向后Euler)【理论到程序】

文章目录 一、数值积分法1. 一般步骤2. 数值方法 二、欧拉方法&#xff08;Euler Method&#xff09;1. 向前欧拉法&#xff08;前向欧拉法&#xff09;2. 向后欧拉法&#xff08;后向欧拉法&#xff09;a. 基本理论b. 算法实现 常微分方程初值问题的数值积分法是一种通过数值方…...

mac安装homebrew/brew遇到443

文章目录 问题描述解决方法方法一方法二 参考文献 问题描述 brew 全称Homebrew 是Mac OSX上的软件包管理工具 想在mac终端安装&#xff0c;运行网上提供的指令 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)&quo…...

VSCODE 在新窗口中打开

使用VS习惯了&#xff0c;经常在新窗口中打开查看 但是VSCODE&#xff0c;无法拖动标签到一个新窗口中&#xff0c;一直以为没这个功能 后来发现 使用快捷健 ctlk,o 可以将标签页在新窗口中打开&#xff0c;虽然不如vsstudio方便&#xff0c;不过也可实现在新窗口打开的功能…...

Python与设计模式--解释器模式

23种计模式之 前言 &#xff08;5&#xff09;单例模式、工厂模式、简单工厂模式、抽象工厂模式、建造者模式、原型模式、(7)代理模式、装饰器模式、适配器模式、门面模式、组合模式、享元模式、桥梁模式、&#xff08;11&#xff09;策略模式、责任链模式、命令模式、中介者模…...

代码随想录算法训练营第36天| 435. 无重叠区间 763.划分字母区间 56. 合并区间

JAVA代码编写 435. 无重叠区间 给定一个区间的集合 intervals &#xff0c;其中 intervals[i] [starti, endi] 。返回 需要移除区间的最小数量&#xff0c;使剩余区间互不重叠 。 示例 1: 输入: intervals [[1,2],[2,3],[3,4],[1,3]] 输出: 1 解释: 移除 [1,3] 后&#x…...

1990-2021年上市公司排污费和环境保护税数据

1990-2021年上市公司排污费和环境保护税数据 1、时间&#xff1a;1990-2021年 2、指标&#xff1a; 证券代码、会计期间、year、month、行业、应缴排污费/环境保护税、其中&#xff1a;大气污染物、其中&#xff1a;水污染物、其中&#xff1a;固体废物、其中&#xff1a;噪…...

微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】

微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来&#xff0c;Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...

【配置 YOLOX 用于按目录分类的图片数据集】

现在的图标点选越来越多&#xff0c;如何一步解决&#xff0c;采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集&#xff08;每个目录代表一个类别&#xff0c;目录下是该类别的所有图片&#xff09;&#xff0c;你需要进行以下配置步骤&#x…...

【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分

一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计&#xff0c;提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合&#xff1a;各模块职责清晰&#xff0c;便于独立开发…...

OPENCV形态学基础之二腐蚀

一.腐蚀的原理 (图1) 数学表达式&#xff1a;dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一&#xff0c;腐蚀跟膨胀属于反向操作&#xff0c;膨胀是把图像图像变大&#xff0c;而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...

08. C#入门系列【类的基本概念】:开启编程世界的奇妙冒险

C#入门系列【类的基本概念】&#xff1a;开启编程世界的奇妙冒险 嘿&#xff0c;各位编程小白探险家&#xff01;欢迎来到 C# 的奇幻大陆&#xff01;今天咱们要深入探索这片大陆上至关重要的 “建筑”—— 类&#xff01;别害怕&#xff0c;跟着我&#xff0c;保准让你轻松搞…...

MySQL:分区的基本使用

目录 一、什么是分区二、有什么作用三、分类四、创建分区五、删除分区 一、什么是分区 MySQL 分区&#xff08;Partitioning&#xff09;是一种将单张表的数据逻辑上拆分成多个物理部分的技术。这些物理部分&#xff08;分区&#xff09;可以独立存储、管理和优化&#xff0c;…...

uniapp 实现腾讯云IM群文件上传下载功能

UniApp 集成腾讯云IM实现群文件上传下载功能全攻略 一、功能背景与技术选型 在团队协作场景中&#xff0c;群文件共享是核心需求之一。本文将介绍如何基于腾讯云IMCOS&#xff0c;在uniapp中实现&#xff1a; 群内文件上传/下载文件元数据管理下载进度追踪跨平台文件预览 二…...

嵌入式学习之系统编程(九)OSI模型、TCP/IP模型、UDP协议网络相关编程(6.3)

目录 一、网络编程--OSI模型 二、网络编程--TCP/IP模型 三、网络接口 四、UDP网络相关编程及主要函数 ​编辑​编辑 UDP的特征 socke函数 bind函数 recvfrom函数&#xff08;接收函数&#xff09; sendto函数&#xff08;发送函数&#xff09; 五、网络编程之 UDP 用…...

数据结构第5章:树和二叉树完全指南(自整理详细图文笔记)

名人说&#xff1a;莫道桑榆晚&#xff0c;为霞尚满天。——刘禹锡&#xff08;刘梦得&#xff0c;诗豪&#xff09; 原创笔记&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 上一篇&#xff1a;《数据结构第4章 数组和广义表》…...

leetcode73-矩阵置零

leetcode 73 思路 记录 0 元素的位置&#xff1a;遍历整个矩阵&#xff0c;找出所有值为 0 的元素&#xff0c;并将它们的坐标记录在数组zeroPosition中置零操作&#xff1a;遍历记录的所有 0 元素位置&#xff0c;将每个位置对应的行和列的所有元素置为 0 具体步骤 初始化…...