xcode 如何在这个 UIPickerView 中放置图像?
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/11298603/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
How can I put an image in this UIPickerView?
提问by Jose Garfias Lopez Parkinson
I don't have any idea how can I create a custom UIPickerView with an image on the side of the text.
我不知道如何创建自定义 UIPickerView 在文本一侧带有图像。
I've been searching for a method and I just found this:
我一直在寻找一种方法,我刚刚找到了这个:
- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row
forComponent:(NSInteger)component reusingView:(UIView *)view
But I don't know how I can use that.
但我不知道如何使用它。
These are my arrays:
All works perfectly, I just want to put a diferent image in each row, with 10 different colors.
The colors will be the same for the 3 components but different in each row.
like this image. LINK!!!
这些是我的数组:
一切正常,我只想在每一行中放置一个不同的图像,有 10 种不同的颜色。3 个组件的颜色相同,但每行的颜色不同。喜欢这个形象。关联!!!
- (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"];
}
this is my uipickerview:
这是我的 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];
}
采纳答案by Oscar Gomez
From the 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.
The important thing here is the view that is returned, which is the view that is used to display the contents for that row on the picker view, and is where you want to add any images you want.
这里重要的是返回的视图,该视图用于在选择器视图上显示该行的内容,并且是您想要添加任何图像的位置。
First you have to implement the delegate method, and declare it in your .h like this:
首先,您必须实现委托方法,并在您的 .h 中像这样声明它:
MyClass <UIPickerViewDelegate>
in your .m
在你的.m
myUIPickerObject.delegate = self;
then implement the method like this:
然后实现这样的方法:
- (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;
}
Hope that helps.
希望有帮助。
回答by Jose Pose S
This code works for me:
这段代码对我有用:
-(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;
}