IOS 自定义UIPickView详解及实例代码
发布时间 - 2026-01-10 22:03:19 点击率:次IOS 自定义UIPickView

苹果一直推崇使用原生的组件,自带的UIPickView其实也很漂亮了,看起来也很美观。但是有时候,产品会有一些特殊的设计和需求。本文将会讲解如何修改苹果原生的组件的属性,达到自定义UIPickView的效果。
需求如下。需要自定义一个Tab。自定义选中文字的颜色。自定义选中颜色背景,自定义未选中文字颜色。
修改未选中的文字的字体和颜色
经过分析,上面的取消和确定按钮实现起来还是很简单的。加一个条就好了,我就不介绍具体步骤,下面的没有选中时候文字的样色,已经字体大小,我们都可以在下面的代理方法里面修改。
//Change style
- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view{
CGFloat width = [self pickerView:self.pickerView widthForComponent:component];
CGFloat rowheight =[self pickerView:self.pickerView rowHeightForComponent:(component)];
UIView *myView = [[UIView alloc]init];
myView.frame =CGRectMake(0.0f, 0.0f, width, rowheight);
UILabel *txtlabel = [[UILabel alloc] init];
txtlabel.textColor = self.plainColor;
txtlabel.tag=200;
txtlabel.font = [UIFont systemFontOfSize:15*SCALE_6];
txtlabel.textAlignment = NSTextAlignmentCenter;
txtlabel.frame = myView.frame;
txtlabel.text = [self pickerView:pickerView titleForRow:row forComponent:component];
[myView addSubview:txtlabel];
return myView;
}
这样就可以修改未选中文字的颜色了。
修改选中的背景颜色和字体
但是背景颜色和字体如何修改呢。就是下图这个颜色和自体:
我一开始尝试了在这种方法,就是在上面加一层Label。然后在代理方法中改变Label的值。
-(NSString*)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
if (component==0) {
return self.leftArray[row];
}else if(component==1){
return self.rightArray[row];
}else {
return self.rightArray[row];
}
}
不过这个方法在如果使用手指点击的话,索引值是对不上的,这样的后果就是,Label会一卡一卡的。如果只在这个方法设置Label的值,那快速滑动的时候获取不到值,Label值变化就会很慢。完全没有了原生的那种效果了。
最后,我才用的是获取系统图层的方法,在选择器的代理方法里面获取相应的图层,然后进行修改。我们先看一下PickView的图层。
我们只需要在代理方面里面拿到对应的视图然后修改就好
//Change style
- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view{
CGFloat width = [self pickerView:self.pickerView widthForComponent:component];
CGFloat rowheight =[self pickerView:self.pickerView rowHeightForComponent:(component)];
UIView *myView = [[UIView alloc]init];
myView.frame =CGRectMake(0.0f, 0.0f, width, rowheight);
UILabel *txtlabel = [[UILabel alloc] init];
txtlabel.textColor = self.plainColor;
txtlabel.tag=200;
txtlabel.font = [UIFont systemFontOfSize:15*SCALE_6];
txtlabel.textAlignment = NSTextAlignmentCenter;
txtlabel.frame = myView.frame;
txtlabel.text = [self pickerView:pickerView titleForRow:row forComponent:component];
[myView addSubview:txtlabel];
UIView* topLine = [pickerView.subviews objectAtIndex:1];
UIView* botomLine = [pickerView.subviews objectAtIndex:2];
topLine.hidden = YES;
botomLine.hidden = YES;
BOOL isSetttingBackColor = NO;
UIView *subview = [self.pickerView.subviews firstObject];
for ( UIView *pickerColumnView in subview.subviews) {
NSLog(@"pickerColumnView class %@",[pickerColumnView class]);
UIView *pickerView = [pickerColumnView.subviews lastObject];
if (!isSetttingBackColor) {
pickerView.backgroundColor = self.selectedBackColor;
isSetttingBackColor = !isSetttingBackColor;
}
UIView *tableView = [pickerView.subviews lastObject];
for (UIView *cell in tableView.subviews) {
NSLog(@"cell class %@",[cell class]);
UIView *cellview = [cell.subviews lastObject];
UIView *labelSuper = [cellview.subviews lastObject];
UILabel *label = [labelSuper.subviews lastObject];
label.textColor = [UIColor whiteColor];
}
}
return myView;
}
下面的代码是用户隐藏pickView自带的两根细线。
UIView* topLine = [pickerView.subviews objectAtIndex:1]; UIView* botomLine = [pickerView.subviews objectAtIndex:2]; topLine.hidden = YES; botomLine.hidden = YES;
设置是否修改颜色BOOL isSetttingBackColor = NO;这个变量是为了防止多次设置背景颜色。造成相互遮盖。
最后效果如下:
Demo地址:http://xiazai./201612/yuanma/JSDCustomPickView-master().rar
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
# IOS
# 自定义UIPickView
# 自定义UIPickView实例
# UIPickView自定义实现示例
# IOS10 隐私权限设置实例详解
# IOS 静态库打包流程简化详细介绍
# IOS 静态库和Framework区别
# iOS自定义UICollectionViewLayout实现瀑布流布局
# IOS UITableViewCell详解及按钮点击事件处理实例
# IOS 开发之自定义按钮实现文字图片位置随意定制
# 详解iOS开发 - 用AFNetworking实现https单向验证
# 双向验证
# IOS开发 UIAlertController详解及实例代码
# 自定义
# 图层
# 也很
# 自带
# 的是
# 就会
# 会有
# 将会
# 在这
# 就不
# 我一
# 就好
# 只需
# 要在
# 不上
# 希望能
# 很简单
# 只在
# 种方法
# 在上面
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel Eloquent访问器与修改器是什么_Laravel Accessors & Mutators数据处理技巧
香港服务器部署网站为何提示未备案?
网站建设保证美观性,需要考虑的几点问题!
Laravel怎么发送邮件_Laravel Mail类SMTP配置教程
高防服务器租用首荐平台,企业级优惠套餐快速部署
微信推文制作网站有哪些,怎么做微信推文,急?
javascript基于原型链的继承及call和apply函数用法分析
Claude怎样写结构化提示词_Claude结构化提示词写法【教程】
个人摄影网站制作流程,摄影爱好者都去什么网站?
如何在IIS中配置站点IP、端口及主机头?
公司门户网站制作流程,华为官网怎么做?
北京网站制作公司哪家好一点,北京租房网站有哪些?
如何在七牛云存储上搭建网站并设置自定义域名?
Laravel如何使用Eloquent ORM进行数据库操作?(CRUD示例)
Laravel DB事务怎么使用_Laravel数据库事务回滚操作
php中::能调用final静态方法吗_final修饰静态方法调用规则【解答】
香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧
英语简历制作免费网站推荐,如何将简历翻译成英文?
Laravel如何使用Service Provider服务提供者_Laravel依赖注入与容器绑定【深度】
制作网站软件推荐手机版,如何制作属于自己的手机网站app应用?
大型企业网站制作流程,做网站需要注册公司吗?
如何挑选最适合建站的高性能VPS主机?
Laravel怎么实现模型属性的自动加密
Laravel如何构建RESTful API_Laravel标准化API接口开发指南
Laravel storage目录权限问题_Laravel文件写入权限设置
Laravel Asset编译怎么配置_Laravel Vite前端构建工具使用
Laravel API路由如何设计_Laravel构建RESTful API的路由最佳实践
免费网站制作appp,免费制作app哪个平台好?
在线教育网站制作平台,山西立德教育官网?
Claude怎样写约束型提示词_Claude约束提示词写法【教程】
JS中页面与页面之间超链接跳转中文乱码问题的解决办法
在线制作视频网站免费,都有哪些好的动漫网站?
使用C语言编写圣诞表白程序
Linux系统命令中screen命令详解
百度浏览器ai对话怎么关 百度浏览器ai聊天窗口隐藏
javascript如何操作浏览器历史记录_怎样实现无刷新导航
Laravel如何集成第三方登录_Laravel Socialite实现微信QQ微博登录
如何用好域名打造高点击率的自主建站?
宙斯浏览器文件分类查看教程 快速筛选视频文档与图片方法
香港服务器建站指南:外贸独立站搭建与跨境电商配置流程
Python函数文档自动校验_规范解析【教程】
Laravel如何监控和管理失败的队列任务_Laravel失败任务处理与监控
Android okhttputils现在进度显示实例代码
如何用wdcp快速搭建高效网站?
Firefox Developer Edition开发者版本入口
小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?
Laravel怎么连接多个数据库_Laravel多数据库连接配置
昵图网官方站入口 昵图网素材图库官网入口
微博html5版本怎么弄发超话_超话进入入口及发帖格式要求【教程】
Laravel API资源(Resource)怎么用_格式化Laravel API响应的最佳实践

