2012-07-02 44 views
3

我沒有任何想法如何創建一個自定義的UIPickerView與文本的一面圖像。如何將圖像放入此UIPickerView?

我一直在尋找一種方法,我只是發現了這一點:

但我不知道我該怎麼使用它。

這些是我的陣列:
所有的作品都完美無缺,我只是想在每一行中放上一張不同的圖像,有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]; 

} 
+0

你的圖像鏈接要求進行登錄。請使用編輯器中的圖像圖標上傳圖像。 – houbysoft

回答

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這樣的:

在您的m
MyClass <UIPickerViewDelegate> 

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; 
} 

希望有所幫助。

+0

但是這種方法不會替換我之前在每行中顯示的行方法的文字? –

+0

它不會,除非你使你的子視圖太大,只需設置你的圖像放到你的視圖的一部分。然後你將能夠看到文字和圖像。 –

+0

是的!謝謝,但xcode顯示在「視圖」部分: [view addSubView:myImageView]; [查看addSubView:myColorView]; 「不可見@界面uiview宣佈選擇器addSubView」 ...>

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; 
}