美文网首页
UIPickerView的使用

UIPickerView的使用

作者: Arthur澪 | 来源:发表于2020-02-27 17:24 被阅读0次

滚动选择器。

遵守协议

<UIPickerViewDataSource,UIPickerViewDelegate>,用法类似于UITableView一样,需要设置数据源。

创建,布局

    UIPickerView * _pkView = [[UIPickerView alloc] init];
    _pkView.frame = CGRectMake(0, 50, SCREEN_W, 220);
    _pkView.backgroundColor = [UIColor whiteColor];
    _pkView.delegate   = self;
    _pkView.dataSource = self;
    [_containView addSubview:_pkView];

实现数据源方法

1、指定列数

-(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{
    return self.dataArray.count;
}

2、指定每一列的行数

-(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{
    NSArray *arr = self.dataArray[component];
    return arr.count;
}

3、每一行的数据(文字显示)

-(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component{
    
    NSArray *arr = self.dataArray[component];
    NSString *str = [arr objectAtIndex:row];
    return str;
}

如果需要特殊样式,用以下方法添加富文本

- (NSAttributedString *)pickerView:(UIPickerView *)pickerView attributedTitleForRow:(NSInteger)row forComponent:(NSInteger)component{
    
    NSString *titleString = self.dataArray[component][row];
    
    NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc]initWithString:titleString];
    NSRange range = [titleString rangeOfString:titleString];
    
    [attributedString addAttribute:NSForegroundColorAttributeName value:[UIColor redColor] range:range];
    
    return attributedString;
}

4、如果需要自定义每一行的子控件。可以用UILabel来设置字体大小 和背景颜色

-(UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(nullable UIView *)view{
    
    //设置分割线的颜色
    for(UIView *singleLine in pickerView.subviews) {
        if (singleLine.frame.size.height < 1)  
            singleLine.backgroundColor = [UIColor redColor];
    }
    
    UILabel *pickerLabel = (UILabel*)view;
    if (!pickerLabel) {
        pickerLabel = [UILabel labelWithText:@"" Font:18 TextColor:[UIColor blackColor]];
    }
    
    if (row == [pickerView selectedRowInComponent:component] ) {
        // 选中样式
        pickerLabel.attributedText = [self pickerView:pickerView attributedTitleForRow:row forComponent:component];
    }else
        pickerLabel.text = [self pickerView:pickerView titleForRow:row forComponent:component];

    return pickerLabel;
}

设置行高

-(CGFloat)pickerView:(UIPickerView *)pickerView rowHeightForComponent:(NSInteger)component{
    return 40;
}

设置每一列占的宽度

- (CGFloat)pickerView:(UIPickerView *)pickerView widthForComponent:(NSInteger)component{
    if (component==0)    return 70.0;
    if (component==1)    return 80.0;
    return 90;
}

代理方法

每一列选中时回调

-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component{
    // 在这里 处理业务逻辑....

    if (component==0)    section0_index = row;
    if (component==1)    section1_index = row;
    if (component==2)    section2_index = row;
    
    NSLog(@"row is %ld,  Component is %ld",row,(long)component);
}

设置数据源,刷新

列数行数都是由数据决定

-(void)setDataSource{
    
    self.arr1 = @[@"1",@"2",@"3",@"4",@"5"];
    self.arr2 = @[@"A",@"B",@"C",@"D",@"E",@"F",@"G",@"H",@"I",@"J",@"K",@"L"];
    self.arr3 = @[@"一",@"二",@"三",@"四",@"五",@"六",@"七",@"八",@"九",@"十" ];
    
    self.dataArray = [NSMutableArray arrayWithObjects:self.arr1,self.arr2, self.arr3, nil];
    // 刷新所有列
    [self.pkView reloadAllComponents];
}

常用方法

刷新某一列的数据

[pickerView reloadComponent:1];

滚动到(选中)某行

[self.pkView selectRow:12 inComponent:1 animated:NO];

获取某列选中的row

NSUInteger row = [self.pkView selectedRowInComponent:0];

获取row的size

CGSize size = [self.pickerView rowSizeForComponent:0]

返回指定列的列表项所使用的UIView控件

UIView *pickview=[self.pickerView viewForRow:0 forComponent:0];

相关文章

  • 36-Swift之UIPickerView

    一、UIPickerView的使用和介绍 UIPickerView是一个选择器控件,它比UIDatePicker更...

  • UI -- UIPickerView(拾取器)的使用

    一、UIPickerView(拾取器)的使用 1、UIPickerView控件生成的表格可以提供滚动的轮盘 ...

  • Swift 街道四级地址选择 封装为Framework动态库

    使用UIPickerView实现 Xcode9及以上 Swift4 支持地址反向选中UIPickerView相应行...

  • PickerView - IOS

    一、UIPickerView(拾取器)的使用 1、UIPickerView控件生成的表格可以提供滚动的轮盘, 2、...

  • iOS学习 - UIPickerView

    UIPickerView使用: 1、单个PickerView的使用 #pragma mark ===== UIPi...

  • UIPickerView使用

    最近,上课讲解了日期选择器和普通数据选择器的使用,上课讲解的案例是假期学生去向登记,该项目有一定的实际意义,可以在...

  • UIPickerView的使用

    需要引入 RxDataSources ,它提供了许多 pickerView 适配器 适配器类型:RxPickerV...

  • UIPickerView 的使用

    控件的代码与UITabelView非常类似 更简单,代理也类似 #import "ViewController.h...

  • UIPickerView的使用

    UIPickerView继承自UIView,它的用法类似UITableView,需要设置数据源代理UIPicker...

  • UIPickerView的使用

    滚动选择器。 遵守协议 ,用法类似于UITableView一样,需要设置数据源。 创建,布局 实现数据源方法 1、...

网友评论

      本文标题:UIPickerView的使用

      本文链接:https://www.haomeiwen.com/subject/szmggqtx.html