如何在此UIPickerView中放置图像?

时间:2012-07-02 17:48:24

标签: iphone objective-c xcode image uipickerview

我不知道如何创建一个自定义的UIPickerView,文本旁边有一个图像。

我一直在寻找一种方法,我刚刚发现了这个:

- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row
forComponent:(NSInteger)component reusingView:(UIView *)view

但我不知道如何使用它。

这些是我的阵列:
一切都很完美,我只想在每一行中添加10种不同颜色的不同图像。 3个组件的颜色相同,但每行不同。 喜欢这个图像。 LINK!!!

- (void)viewDidLoad
{
    [super viewDidLoad];

    Colores1 = [[NSMutableArray alloc] init];
    [Colores1 addObject:@"Negro"];
    [Colores1 addObject:@"Marrón"];
    [Colores1 addObject:@"Rojo"];
    [Colores1 addObject:@"Naranja"];
    [Colores1 addObject:@"Amarillo"];
    [Colores1 addObject:@"Verde"];
    [Colores1 addObject:@"Azul"];
    [Colores1 addObject:@"Violeta"];
    [Colores1 addObject:@"Gris"];
    [Colores1 addObject:@"Blanco"];

    Colores2 = [[NSMutableArray alloc] init];
    [Colores2 addObject:@"Negro"];
    [Colores2 addObject:@"Marrón"];
    [Colores2 addObject:@"Rojo"];
    [Colores2 addObject:@"Naranja"];
    [Colores2 addObject:@"Amarillo"];
    [Colores2 addObject:@"Verde"];
    [Colores2 addObject:@"Azul"];
    [Colores2 addObject:@"Violeta"];
    [Colores2 addObject:@"Gris"];
    [Colores2 addObject:@"Blanco"];

    Colores3 = [[NSMutableArray alloc] init];
    [Colores3 addObject:@"Negro"];
    [Colores3 addObject:@"Marrón"];
    [Colores3 addObject:@"Rojo"];
    [Colores3 addObject:@"Naranja"];
    [Colores3 addObject:@"Amarillo"];
    [Colores3 addObject:@"Verde"];
    [Colores3 addObject:@"Azul"];
    [Colores3 addObject:@"Violeta"];
    [Colores3 addObject:@"Gris"];
    [Colores3 addObject:@"Blanco"];
}

这是我的uipickerview:

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
{
    return 3;
}
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{

    if(component == Primbanda)
        return [Colores1 count];
    if(component == Segubanda)
        return [Colores2 count];
    if (component == tercbanda)
        return [Colores3 count];
    return 0;
}
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
    if(component == Primbanda)
        return [Colores1 objectAtIndex:row];
    if(component == Segubanda)
        return [Colores2 objectAtIndex:row];
    if (component == tercbanda) 
        return [Colores3 objectAtIndex:row];
    return 0;

}
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{
    NSLog(@"Row is:%d Component is:%d",row,component);

    int a;//entero de componente 1
    int b;//entero de componente 2
    double c;//entero de componente 3
    double resultado;
    int d; //valor de componente 1 y 2
    NSString *a1; //cadena de a y b!

    a = [pickerView selectedRowInComponent:0]; //asigno a las variables segun el numero!! 
    b = [pickerView selectedRowInComponent:1];

    switch ([pickerView selectedRowInComponent:2]) { //asi se le asignan valores propios!
        case 0:
            c=1;
            break;
        case 1:
            c=10;
            break;
        case 2:
            c=100;
            break;
        case 3:
            c=1000;
            break;
        case 4:
            c=10000;
            break;
        case 5:
            c=100000;
            break;
        case 6:
            c=1000000;
            break;
        case 7:
            c=10000000;
            break;
        case 8:
            c=100000000;
            break;
        case 9:
            c=1000000000;
            break;
        default:
            break;
    }
    NSLog(@"El valor de la tercera es ;%f",c);
    a1 = [[NSString alloc]initWithFormat:@"%d%d",a,b]; //junto las variables a y b
    d= [a1 intValue];    //guardo en la variable
    NSLog(@"el valor de C multiplicado es %f",c);

    resultado = d*c; //multiplica ab por el valor de c

    NSLog(@"valor de resistencia es %.0f Ohms",resultado); //awebo! me salio! :D

    labelresultado.text = [[NSString alloc]initWithFormat:@"%.0f",resultado];

}

2 个答案:

答案 0 :(得分:2)

来自UIPickerViewDelegate docs

pickerView:viewForRow:forComponent:reusingView:

Called by the picker view when it needs the view to use for a given row in a given component.
- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view
Parameters

pickerView

    An object representing the picker view requesting the data.
row

    A zero-indexed number identifying a row of component. Rows are numbered top-to-bottom.
component

    A zero-indexed number identifying a component of pickerView. Components are numbered left-to-right.
view

    A view object that was previously used for this row, but is now hidden and cached by the picker view.

这里重要的是返回的视图,该视图用于在选择器视图上显示该行的内容,并且是您要添加所需图像的位置。

首先,你必须实现委托方法,并在你的.h中声明它:

MyClass <UIPickerViewDelegate>
你的.m

中的

myUIPickerObject.delegate = self;

然后实现这样的方法:

- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view
{
    UIView *myColorView = [UIView new]; //Set desired frame
    myColorView.backgroundColor = [UIColor redColor]; //Set desired color or add a UIImageView if you want...
    UIImageView *myImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:"myImage.png"]];
    [view addSubview:myImageView];
    [view addSubview:myColorView];

    //Add subview retains view, so OK to release now
    [myImageView release];
    [myColorView release];

    return view;
}

希望有所帮助。

答案 1 :(得分:1)

此代码适用于我:

-(void) viewDidLoad{
    [super viewDidLoad];
    // Initialize Data
    _pickerData = @[@"Item 1", @"Informatio", @"AUx2 ", @"Services 061", @"Problems"];

    // Connect data
    self.tipoConsulta.dataSource = self;
    self.tipoConsulta.delegate = self;
}

- (int)numberOfComponentsInPickerView:(UIPickerView *)pickerView
{
    return 1;
}

// The number of rows of data
- (int)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{
    return _pickerData.count;
}

// The data to return for the row and component (column) that's being passed in
- (UIView*)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view
{
    UIView *pickerCustomView = [UIView new];

    UILabel *mytext = [[UILabel alloc] init];
    mytext.text = _pickerData[row];
    [mytext setFrame:CGRectMake(60,0,50,50)];
    [pickerCustomView addSubview:mytext];
    UIImageView *myIcon = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"ic_tipo_servicio061_rounded.png"]];
    [myIcon setFrame:CGRectMake(0, 0, 50, 50)];

    [pickerCustomView addSubview:myIcon];
    [pickerCustomView addSubview:mytext];
    return pickerCustomView;
}