UIPickerView Row Color

后端 未结 5 1690
Happy的楠姐
Happy的楠姐 2021-02-15 17:04

Does anyone know how to change the color of a row (or row background) in the UIPickerView control from the iPhone SDK? Similiar to the below title for row, however I would also

相关标签:
5条回答
  • 2021-02-15 17:19
    -(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component{
    
        UILabel *labelSelected = (UILabel*)[pickerView viewForRow:row forComponent:component];
        [labelSelected setTextColor:[UIColor redColor]];
    
    }
    

    And

    - (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view{
    
        UILabel *label = (id)view;
    
        if (!label){
    
          label=[[UILabel alloc]init];
          label.textAlignment = NSTextAlignmentCenter;
          pickerView.backgroundColor=[UIColor whiteColor];
          label.text=[self pickerView:pickerView titleForRow:row forComponent:component];
          label.textColor=[UIColor grayColor];
    
        }
        return label;
    }
    
    0 讨论(0)
  • 2021-02-15 17:22

    Do this:

    label.backgroundColor = [UIColor yourcolorColor];
    
    0 讨论(0)
  • 2021-02-15 17:29

    Thanks Noah, that's exactly what I needed. I wanted to add the code here just in case anyone else needs (or wants to comment on :)

    - (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view {
    
        CGRect imageFrame = CGRectMake(0.0, 0.0, 15, 15);
        UIImageView *label = [[[UIImageView alloc] initWithFrame:imageFrame] **autorelease**];
    
        if (row == 0)
        {
            label.backgroundColor = [UIColor redColor];
        }
        if (row == 1)
        {
            label.backgroundColor = [UIColor blueColor];
        }
        if (row == 2)
        {
            label.backgroundColor = [UIColor blackColor];
        }   
        return label;
    }
    
    0 讨论(0)
  • 2021-02-15 17:30

    You can return an arbitrary view in the delegate's -pickerView:viewForRow:forComponent:reusingView: method, documented here.

    0 讨论(0)
  • 2021-02-15 17:39

    I implemented the following based on Sean's answer:

    - (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view
    {
        CGRect rowFrame = CGRectMake(00.0f, 0.0f, [pickerView viewForRow:row forComponent:component].frame.size.width, [pickerView viewForRow:row forComponent:component].frame.size.height);
        UILabel *label = [[UILabel alloc] initWithFrame:rowFrame];
        label.font = [UIFont boldSystemFontOfSize:18.0f];
    
        // This is an array I pass to the picker in prepareForSegue:sender:
        label.text = [self.values objectAtIndex:row];
        label.textAlignment = UITextAlignmentCenter;
    
        // This is an array I pass to the picker in prepareForSegue:sender:
        if ([self.backgroundColors count]) {
            label.backgroundColor = [self.backgroundColors objectAtIndex:row];
    
            // self.lightColors is an array I instantiate in viewDidLoad: self.lightColors = @[ [UIColor yellowColor], [UIColor greenColor], [UIColor whiteColor] ];
            label.textColor = [self.lightColors containsObject:label.backgroundColor] ? [UIColor blackColor] : [UIColor whiteColor];
        } else {
            label.textColor = [UIColor blackColor];
        }
    
        return label;
    }
    
    0 讨论(0)
提交回复
热议问题