代码编织梦想

写在开头

  • 昨天学习了iOS一个简单的控件。 UIPickerView;
    请添加图片描述
  • UIPickerView组件类似HTML都Select组件效果,提供数据供用户选择。可以通过plist文件提供数据。UIPickerView是一个选择器控件,可以生成单列的选择器,也可以生成多列的选择器,而且开发者完全可以自定义选择项的外观,用法十分灵活。UIPickerView直接继承了UIView,没有继承UIControl,因此,它不能像UIControl那样绑定事件处理方法,UIPickerView的事件处理由其委托对象完成
  • 类似于上面的闹钟实现,UIPickerView也是有自己的代理方法和数据源。

UIPickerView实现简单的demo

  • 要实现的代理请添加图片描述
  • UIPickerViewDataSource的方法
  • 协议中有两个必须实现的方法-分别是设置选择器的行和列数
    请添加图片描述
  • UIPickerViewDelegate
返回UIPickerView中Component列的宽度
 - (CGFloat)pickerView:(UIPickerView *)pickerView widthForComponent:(NSInteger)component;
 
 返回UIPickerView中Component列中每行的高度
 - (CGFloat)pickerView:(UIPickerView *)pickerView rowHeightForComponent:(NSInteger)component;
 
 当选择某一项Component列中的row行时的回调函数
 - (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
 - 标准的UIPickerView内容,只有字符串
 - (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component;
 
 自定义的UIPickerView内容,给每个列,行设置一个UIView对象
 - (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view;
 ----这里列为component,行row返回一个UIView用来显示在UIPickerView中。reusingView:(UIView *)

  • 既然有数据源,那参考UITableView就有reloadData方法
- (void)reloadAllComponents;
- (void)reloadComponent:(NSInteger)component;

DEMO实现

请添加图片描述

  • 我实现了3个列表的联动,第一个列表代表了组别,第二个列表对应第一个列表的内容,滑动第一个列表会出发delegate事件,刷新数据
  • m文件的实现
#import "ViewController.h"

@interface ViewController ()
//@property (nonatomic, copy)NSArray *pickerArray;
@property (nonatomic, copy)NSArray *directionArray;
@property (nonatomic, copy)NSArray *currentNameArray;
@property (nonatomic, copy)NSArray *nameArray1;
@property (nonatomic, copy)NSArray *nameArray2;
@property (nonatomic, copy)NSArray *nameArray3;
@property (nonatomic, copy)NSArray *nameArray4;
@property (nonatomic, copy)NSArray *Dict;
@property (nonatomic, copy)NSArray *endArray;
@property (nonatomic, copy)NSString *currentEndString;
@property (nonatomic, strong)UIPickerView *pickerView;
@end

@implementation ViewController

请添加图片描述

  • 初始化pickerView
 self.pickerView = [[UIPickerView alloc] initWithFrame:CGRectMake(0, [UIScreen mainScreen].bounds.size.height - 220, [UIScreen mainScreen].bounds.size.width, 200)];
    self.pickerView.delegate = self;
    self.pickerView.dataSource = self;
  • 初始化数组
self.directionArray = @[@"EDG", @"NBA", @"Bro", @"OS"];
    self.nameArray1 = @[@"Flander", @"Jiejie", @"Scout", @"Viper", @"Mekio", @"ClearLove"];
    self.nameArray2 = @[@"KingJames", @"Curry", @"Jordan", @"Durant", @"Harden"];
    self.nameArray3 = @[@"LdQ", @"ScMokey", @"HJC"];
    self.nameArray4 = @[@"MacOS", @"iOS", @"WatchOS", @"PadOS"];
    self.endArray = @[@"LOL", @"Stars", @"Friends", @"Study"];
    self.Dict = @[_nameArray1, _nameArray2, _nameArray3, _nameArray4];
  • 数据源实现
  • 返回3组 代表了3个列表,对于- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component方法,我的参考是component和tableview的indexpath的section一样,对于第一个列表component == 0返回第一列的长度

请添加图片描述

  • Delegate实现
  • - (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component 类似于tableview的返回indexpath的对应内容的方法
// 滑动触发事件
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {
    // 使用一个UIAlertView来显示用户选中的列表项
    if (component == 0) {
        self.currentNameArray = self.Dict[row];
        self.currentEndString = self.endArray[row];
        [self.pickerView reloadComponent:1];
        [self.pickerView reloadComponent:2];
        //这个方法的selectRow即可以表示你更新第一个列表之后是否更新到第二个列表的对应的row
        // BOOL类型的YES表示动画效果
        [self.pickerView selectRow:0 inComponent:1 animated:YES];
        [self.pickerView selectRow:0 inComponent:2 animated:YES];
        
        NSLog(@"选择了%@方向", self.directionArray[row]);
    } else {
        NSLog(@"%@", self.currentNameArray[row]);
    }
}
  • 如何实现滑动第一个列表刷新第二个列表,如上述代码,在滑动component的时候刷新第二个列表和请添加图片描述
  • 对于代码里面的[self.pickerView selectRow:0 inComponent:1 animated:YES]; [self.pickerView selectRow:0 inComponent:2 animated:YES];方法,就是在滑动刷新完之后是否让回到row = 0的内容,animated即是是否开启动画效果
  • 返回列表内容的函数
// 返回列表的内容
#pragma mark UIPickerViewDelegate;
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {
//    NSLog(@"%@", self.directionArray[row]);
    if (component == 0) {
        return self.directionArray[row];
    } else if (component == 1){
        return  self.currentNameArray[row];
    } else {
        return  self.currentEndString;
    }
}
// 返回列表的宽度
- (CGFloat)pickerView:(UIPickerView *)pickerView widthForComponent:(NSInteger)component {
    return 130;
}

总结

  • 很简单但是很实用的控件,在项目里也许会用到
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_61639290/article/details/127973851

ios 开发 - uipickerview使用记录-爱代码爱编程

简单记录一下 // // CalorieViewController.m // ISport // // Created by command.Zi on 15/1/9. // Copyright (c) 2015年 yundu. All rights reserved. // #import "CalorieViewController.h

ios开发--uipickerview的动画效果-爱代码爱编程

开发中用到UIPickerView显示和隐藏的动画.随手记一下 第一步:写一个动画方法 - (void)ViewAnimation:(UIView*)view willHidden:(BOOL)hidden { [UIView animateWithDuration:0.3 animations:^{ if (hid

ios开发-uipickerview 简单介绍-爱代码爱编程

简介:UIPickerView是一个选择器控件,它比UIDatePicker更加通用,它可以生成单列的选择器,也可生成多列的选择器,而且开发者完全可以自定义选择项的外观,因此用法非常灵活。UIPickerView直接继承了UIView,没有继承UIControl,因此,它不能像UIControl那样绑定事件处理方法,UIPickerView的事件处理由

ios开发基础视图 - uipickerview-爱代码爱编程

  UIPickerView组件类似HTML都Select组件效果,提供数据供用户选择。可以通过plist文件提供数据。UIPickerView是一个选择器控件,可以生成单列的选择器,也可以生成多列的选择器,而且开发者完全可以自定义选择项的外观,用法十分灵活。UIPickerView直接继承了UIView,没有继承UIControl,因此,它不能像UICo

ios基础控件--uipickerview__sevenk的博客-爱代码爱编程

本来这篇想写UICollectionView的,但是上午写了一个demo不是很满意,并且我自己在开发中使用的较少,就留着以后再写吧,今天先来总结一下UIPickerView,这个控件也是一个比较常用的控件,使用场景比较多,比

ios-uipickerview 详解总结_weixin_33779515的博客-爱代码爱编程

写在文前 由于最近开发中经常碰到类似日期选择器相关业务使用场景,虽然这个系统控件相对来说非常简单,有点儿类似UITableView的感觉,初始化之后设置数据源,代理,完成相应的数据源方法就可以正常展示了,而且其数据源 代理方法相对来说也很少,肯花心思去思考 记忆,很快就能掌握这个控件。 一、UIPickerVie

iOS——UIPickerView使用-爱代码爱编程

UIPickerView UIPickerView在iOS开发中是一个很常见的控件,例如计时器选择时间,填写省市区位置时都可以用的上,最近写项目时使用到了这个技术,总结一下。 遵循的协议 UIPickerView类似于UITableView这类控件,是需要遵循数据源和代理两个协议的。 我们在使用前添加这两个协议。 @interface ViewCo

[iOS开发]UIPickerView学习-爱代码爱编程

今天学习了iOS常见的滚动选择器,一起来看看👀 新建一个选择器 _pickerView = [[UIPickerView alloc] initWithFrame:CGRectMake(40, 100, self.view.frame.size.width - 80, 200);]; _pickerView.backgroundColor = [UIC

iOS—— UIPickerView-爱代码爱编程

iOS—— UIPickerView 前言 在绝大部分App中,我们都可以见到一个强大的控件——UIPickerView,它可以用来选择地区,选择时间等等,所以如何掌握UIPickerView就变得特别重要,下面简单的说一下UIPickerView的实现过程: 实现过程 UIPickerView的创建类似于UITableView的建立, 首先,UI