2012-07-02 2 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 так:

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

yep! oks спасибо, но показ xcode в части «view»: [view addSubView: myImageView]; [посмотреть addSubView: myColorView]; "no visible @ interface for 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; 
} 
Смежные вопросы