iOS - 实现自定义UIPickerView选中的字体颜色、字

2020-04-06  本文已影响0人  俺不是大佬儿

在使用UIPickerView显示时间,城市等的选择时,系统定义的样式总是与自己的页面不搭配需要进行精加工,就给大家介绍一下怎样自定义UIPickerView选中的字体颜色、字号、字体等属性

自定义UIPickerView选中的字体颜色、字号、字体等属性时需要定义

- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(nullable UIView *)view __TVOS_PROHIBITED;方法在此方法中 根据需要 重写下面的两个方法

//重写 - (nullable NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component __TVOS_PROHIBITED; 方法加载title

/*重写- (nullable NSAttributedString *)pickerView:(UIPickerView *)pickerView attributedTitleForRow:(NSInteger)row forComponent:(NSInteger)component NS_AVAILABLE_IOS(6_0) __TVOS_PROHIBITED; 方法加载 attributedText*/

具体看实例:(实例以加载三级城市选择为例)

- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view{
    
    //设置分割线的颜色
    for(UIView *singleLine in pickerView.subviews)
    {
        if (singleLine.frame.size.height < 1)
        {
            singleLine.backgroundColor = [UIColor grayColor];
        }
    }
    
    /*重新定义row 的UILabel*/
    UILabel *pickerLabel = (UILabel*)view;
    
    if (!pickerLabel){
        
        pickerLabel = [[UILabel alloc] init];
        // Setup label properties - frame, font, colors etc
        //adjustsFontSizeToFitWidth property to YES
        [pickerLabel setTextColor:[UIColor darkGrayColor]];
        pickerLabel.adjustsFontSizeToFitWidth = YES;
        [pickerLabel setTextAlignment:NSTextAlignmentCenter];
        [pickerLabel setBackgroundColor:[UIColor clearColor]];
        [pickerLabel setFont:[UIFont systemFontOfSize:16.0f]];
       // [pickerLabel setFont:[UIFont boldSystemFontOfSize:16.0f]];
    }
    
    // Fill the label text here
    
    //重写 - (nullable NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component __TVOS_PROHIBITED; 方法加载title
    
    //pickerLabel.text = [self pickerView:pickerView titleForRow:row forComponent:component];
    
    
    if(component == 0){
        
        if(row == _firstIndex){
            /*选中后的row的字体颜色*/
            /*重写- (nullable NSAttributedString *)pickerView:(UIPickerView *)pickerView attributedTitleForRow:(NSInteger)row forComponent:(NSInteger)component NS_AVAILABLE_IOS(6_0) __TVOS_PROHIBITED; 方法加载 attributedText*/
            
            pickerLabel.attributedText
            = [self pickerView:pickerView attributedTitleForRow:_firstIndex forComponent:component];
            
        }else{
            
            pickerLabel.text = [self pickerView:pickerView titleForRow:row forComponent:component];
        }
        
    }else if (component == 1){
        
        if(row == _secondIndex){
            
            pickerLabel.attributedText
            = [self pickerView:pickerView attributedTitleForRow:_secondIndex forComponent:component];
        }else{
            
            pickerLabel.text = [self pickerView:pickerView titleForRow:row forComponent:component];
        }
        
    }else if (component == 2){
        
        if(row == _thirdIndex){
            
            pickerLabel.attributedText
            = [self pickerView:pickerView attributedTitleForRow:_thirdIndex forComponent:component];
            
        }else{
            
            pickerLabel.text = [self pickerView:pickerView titleForRow:row forComponent:component];
        }
        
        
    }
    
    return pickerLabel;
}

- (NSAttributedString *)pickerView:(UIPickerView *)pickerView attributedTitleForRow:(NSInteger)row forComponent:(NSInteger)component{
    
    NSString *titleString;
    
    if (component == 0) {
        
        CityModel *md = _dataSource[row];
        titleString = md.region_name;
    }
    else if (component == 1){
        
        CityModel *md = _dataSource[_firstIndex];
        _shiArr = md.regionlist;
        CityModel *shi = _shiArr[row];
        titleString = shi.region_name;
        
    }
    else if (component == 2){
        
        CityModel *md = _shiArr[_secondIndex];
        _quArr = md.regionlist;
        CityModel *qu = _quArr[row];
        titleString = qu.region_name;
        
    }
    
    
    NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc]initWithString:titleString];
    NSRange range = [titleString rangeOfString:titleString];
    [attributedString addAttribute:NSForegroundColorAttributeName value:navBGColor range:range];
    
    return attributedString;
}

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component{
    
    if (component == 0) {
        
        CityModel *md = _dataSource[row];
        return md.region_name;
    }
    else if (component == 1){
        
        CityModel *md = _dataSource[_firstIndex];
        _shiArr = md.regionlist;
        CityModel *shi = _shiArr[row];
        return shi.region_name;
    }
    else if (component == 2){
        
        CityModel *md = _shiArr[_secondIndex];
        _quArr = md.regionlist;
        CityModel *qu = _quArr[row];
        return qu.region_name;
        
    }
    
    return nil;
}

效果如下:


自定义选中颜色效果

同时可以根据上面的思路自定义你需要的样式

上一篇 下一篇

猜你喜欢

热点阅读