iOS——UIPickerView选择器

UIPickerView

UIPickerView是 iOS 开发中常用的用户界面组件之一,用于在垂直方向上显示一个滚动的列表,用户可以通过滚动选择其中的一项。

UIPickerView的协议方法

UIPickerView和UItableView差不多,UIPickerView也要设置代理和数据源。UIPickerView的数据源和代理方法中:

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView;// 设置UIPickerView的列数
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component;// 设置UIPickerView的行数

上面这两个方法是必须要实现的,其中前者负责设置UIPickerView的列数,后者负责设置行数。
其他协议方法:

// 设置PickerView第row行的选项标题
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component; 
// 设置第component列第row行显示的视图
- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view;
// 当选中第component列第row行的时候,就调用该方法
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component;
// 设置第component列的宽度
- (CGFloat)pickerView:(UIPickerView *)pickerView widthForComponent:(NSInteger)component;
// 设置第component列的行高
- (CGFloat)pickerView:(UIPickerView *)pickerView rowHeightForComponent:(NSInteger)component;// 获取第component列第row行的视图,前提是该列必须是通过视图显示
- (UIView *)viewForRow:(NSInteger)row forComponent:(NSInteger)component;
// 刷新所有列的数据
- (void)reloadAllComponents;
// 刷新第component列的数据
- (void)reloadComponent:(NSInteger)component;
// 在PickerView里显示选中第component列第row的数据
- (void)selectRow:(NSInteger)row inComponent:(NSInteger)component animated:(BOOL)animated;
// 获取第component列选中的行号
- (NSInteger)selectedRowInComponent:(NSInteger)component;

注意

  1. PickerView的高度iOS9之前不能改,默认216,即使修改了也还是216;在iOS9上设置高度为0,PickerView会不显示
  2. PickerView里面每行的高度可以改
  3. 系统自带的控件,数据源和代理属性不需要IBOutlet,也能拖线。自己定义的属性,想要拖线,必须写IBOutlet。

一个demo:
ViewController.h:


#import <UIKit/UIKit.h>@interface ViewController : UIViewController<UIPickerViewDelegate, UIPickerViewDataSource>@property (nonatomic, strong) UIPickerView *pickerView;
@property (nonatomic, copy) NSArray *myArray;
@property (nonatomic, copy) NSArray *chushiArr;
@property (nonatomic, copy) NSArray *juLiArr;
@property (nonatomic, copy) NSArray *caiPinArr;@end

ViewController.m


#import "ViewController.h"@interface ViewController () <UIPickerViewDelegate, UIPickerViewDataSource>@end@implementation ViewController- (void)viewDidLoad {[super viewDidLoad];self.pickerView = [[UIPickerView alloc] init];self.pickerView.delegate = self;self.pickerView.dataSource = self;self.pickerView.frame = CGRectMake(0, 200, self.view.bounds.size.width, 500);self.chushiArr = @[@"销量最高", @"评分最高", @"价格最低", @"价格最高"];self.juLiArr = @[@"距离最近", @"距离最远"];self.caiPinArr = @[@"种类最多", @"销量最高", @"价格最低", @"价格最高"];self.myArray = self.chushiArr;[self.view addSubview:self.pickerView];
}- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {return 2;
}- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {if (component == 0) {return 3;}return [self.myArray count];
}- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {NSArray *xuanZe = @[@"厨师", @"距离", @"菜品"];if (component == 0) {return xuanZe[row];}return self.myArray[row];
}- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {if (component == 0) {if (row == 0) {self.myArray = self.chushiArr;} else if (row == 1) {self.myArray = self.juLiArr;} else if (row == 2) {self.myArray = self.caiPinArr;}[self.pickerView reloadComponent:1];}
}@end

运行结果:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/209893.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

fl studio2024试用版本如何汉化中文?

fl studio2024全称Fruity Loops Studio2024&#xff0c;这款软件也被人们亲切的称之为水果&#xff0c;它是一款功能强大的音乐创作编辑软件&#xff0c;拥有全功能的录音室&#xff0c;大混音盘以及先进的音乐制作工具&#xff0c;用户通过使用该软件&#xff0c;就可以轻松制…

git上传流程

git安装网址&#xff1a;https://git-scm.com 如果您要将本地文件夹上传到名为"compiling"的GitHub仓库&#xff0c;可以按照以下步骤进行操作&#xff1a; 1.安装无脑下一步 2.cd到想上传的文件夹的上一级目录 2.初始化Git仓库&#xff1a;git init 设置分支&a…

C++特殊类设计

1.设计不能被拷贝的类 解析&#xff1a;拷贝只会放生在两个场景中 拷贝构造函数赋值运算符重载 因此想要让一个类禁止拷贝&#xff0c; 就需让该类不能调用“拷贝构造函数”以及“赋值运算符重载”&#xff0c;而C11提供的delete重载关键字可以让这件事情变得更加简单。 1.1.C9…

stl库之list链表与例题

stl中的list是双向链表&#xff0c;优点在于插入/删除元素方便&#xff0c;缺点是随机访问元素时间长 所需头文件&#xff1a;#include <list> 初始化 list<类型名> 变量名 定义一个int类型的变量a list<int> a; 在末尾插入元素 a.push_back(i); 在开…

LeetCode 每日一题 Day 8 || 简单枚举

2048. 下一个更大的数值平衡数 如果整数 x 满足&#xff1a;对于每个数位 d &#xff0c;这个数位 恰好 在 x 中出现 d 次。那么整数 x 就是一个 数值平衡数 。 给你一个整数 n &#xff0c;请你返回 严格大于 n 的 最小数值平衡数 。 示例 1&#xff1a; 输入&#xff1a;n …

Error: Cannot find module ‘@npmcli/config‘ 最新解决办法

看了网上许多这个问题的小伙伴&#xff0c;都是降级node版本来解决的。但是降级并不是我想要的结果。 真正的解决办法就是更新nvm&#xff0c;将你的nvm升级到最新版本&#xff0c;然后卸载掉npm报错的node版本&#xff0c;重新安装即可使用。 解决办法&#xff1a;更新nvm nv…

2020年第九届数学建模国际赛小美赛B题血氧饱和度的变异性解题全过程文档及程序

2020年第九届数学建模国际赛小美赛 B题 血氧饱和度的变异性 原题再现&#xff1a; 脉搏血氧饱和度是监测患者血氧饱和度的常规方法。在连续监测期间&#xff0c;我们希望能够使用模型描述血氧饱和度的模式。   我们有36名受试者的数据&#xff0c;每个受试者以1 Hz的频率连…

【开源视频联动物联网平台】J2mod库写一个Modbus RTU 服务器

J2Mod是一个Java编写的Modbus通信库&#xff0c;可以用于实现Modbus RTU服务器。以下是一个简单的示例&#xff0c;演示如何使用J2Mod库创建一个Modbus RTU服务器&#xff1a; 添加J2Mod库依赖项&#xff1a; 首先&#xff0c;确保在项目中包含J2Mod库。你可以将J2Mod库添加到…

CSPNet: A New Backbone that can Enhance Learning Capability of CNN(2019)

文章目录 -Abstract1 Introduction2 Related workformer work 3 Method3.1 Cross Stage Partial Network3.2 Exact Fusion Model 4 Experiments5 Conclusion 原文链接 源代码 - 梯度信息重用&#xff08;有别于冗余的梯度信息&#xff09;可以减少计算量和内存占用提高效率&am…

C语言 文件操作

文章目录 前言文件概念文件名数据文件&程序文件文本文件&二进制文件文件缓冲区 文件操作FILE结构体文件指针文件打开&关闭文件输入/输出文件指针控制 前言 主要需要看的是概念部分、以及FILE结构体、文件指针部分。其余函数使用&#xff0c;知道其功能存在即可&am…

【SpringBoot】请求参数

1. BS 架构 BS架构&#xff1a;Browser/Server&#xff0c;浏览器/服务器架构模式。客户端只需要浏览器&#xff0c;应用程序的逻辑和数据都存储在服务端。 在SpringBoot进行web程序开发时&#xff0c;它内置了一个核心的Servlet程序 DispatcherServlet&#xff0c;称之为 核…

EasyExcel之文件导出最佳实践

文件导出 官方文档&#xff1a;写Excel | Easy Excel (alibaba.com) 引言 当使用 EasyExcel 进行 Excel 文件导出时&#xff0c;我最近在工作中遇到了一个需求。因此&#xff0c;我决定写这篇文章来分享我的经验和解决方案。如果你对这个话题感兴趣&#xff0c;那么我希望这篇…

c语言插入排序算法(详解)

插入排序是一种简单直观的排序算法&#xff0c;其主要思想是将一个待排序的元素插入到已经排好序的部分的合适位置。 插入排序的原理如下&#xff1a; 将序列分为两部分&#xff1a;已排序部分和未排序部分。初始时&#xff0c;已排序部分只包含第一个元素&#xff0c;未排序…

php 接入 百度编辑器

按照github上的操作下载百度编辑器的包后&#xff0c;根据文档上的步骤操作&#xff08;可能会遇到报错&#xff09;&#xff1a; 1、git clone 仓库 2、npm install 安装依赖&#xff08;如果没有安装 grunt , 请先在全局安装 grunt&#xff09; 我的是报了下面的错&#…

Leetcode 17 电话号码的字母组合

理解题意&#xff1a; 给定一个仅包含数字 2-9 的字符串&#xff0c;返回所有它能表示的字母组合 本质上&#xff1a;数字代表着一个字母集合 数字的个数决定了递归的深度&#xff0c;即树的深度 数字代表的字母组合决定了当前树的宽度。 1.暴力回溯 这里没有什么剪枝…

387.字符串中的第一个唯一字符 —> `size()`

解答&#xff1a; int firstUniqChar(string s) {int size s.size();// char count[26] { 0 };// error.1int count[26] { 0 };// for (int i 0; i < s.size() - 1; i) // error.2for (int i 0; i < size; i){count[s[i] - a] 1;}for (int i 0; i < size; i){…

Android 幸运转盘实现逻辑

一、前言 幸运转盘在很多app中都有&#xff0c;也有很多现实的例子&#xff0c;不过这个难度并不是如何让转盘转起来&#xff0c;真正的难度是如何统一个方向转动&#xff0c;且转到指定的目标区域&#xff08;中奖概率从来不是随机的&#xff09;&#xff0c;当然还不能太假&…

AI全栈大模型工程师(二十二)什么是模型训练

文章目录 💡 这节课会带给你还是写在前面Fine-Tuning 有什么用:先看一个例子我有很多问题一、什么是:二、什么是模型2.1、通俗(不严谨)的说、模型是一个函数:2.2、一个最简单的神经网络三、什么是模型训练3.1、模型训练本质上是一个求解最优化问题的过程3.2、怎么求解3.…

人类的耳朵:听觉的动态范围

作者&#xff1a;听觉健康 听觉的动态范围即可用的听力范围。在坐标系中&#xff0c;它可以表示为以听阈和最大舒适级为界形成的区域&#xff0c;其坐标轴分别为频率和声压级&#xff08;刺激持续时间在某种程度上对其产生影响&#xff09;。是什么因素决定了人类听力的极限&am…

随机森林回归模型,SHAP库可视化

随机森林回归模型 创建一个随机森林回归模型&#xff0c;训练模型&#xff0c;然后使用SHAP库解释模型的预测结果&#xff0c;并将结果可视化。 具体步骤如下&#xff1a; 首先&#xff0c;代码导入了所需的库&#xff0c;包括matplotlib、shap、numpy和sklearn.ensemble。ma…