I have been working on the app, that has 3 uipickers. I want to implement images in each uipicker. However as seen in the image attached below, it just affects only one uipicker, not all of them.I would like to know how I could able to custom all uipicker elements shown in the image
- (void)loadView
{
picker1 = [[UIPickerView alloc] initWithFrame:CGRectMake(30, 200, 250, 250)];
picker1.delegate = self;
picker1.dataSource = self;
picker1.showsSelectionIndicator = YES;
picker1.tag=1;
picker2 = [[UIPickerView alloc] initWithFrame:CGRectMake(390, 200, 250, 250)];
picker2.delegate = self;
picker2.dataSource = self;
picker2.showsSelectionIndicator = YES;
picker2.tag=2;
picker3 = [[UIPickerView alloc] initWithFrame:CGRectMake(750, 200, 250, 250)];
picker3.delegate = self;
picker3.dataSource = self;
picker3.showsSelectionIndicator = YES;
picker3.tag=3;
self.view = [[UIView alloc] initWithFrame:CGRectZero];
self.view.backgroundColor=[UIColor whiteColor];
[self.view addSubview:picker1];
[self.view addSubview:picker2];
[self.view addSubview:picker3];
UIImage *seven = [UIImage imageNamed:@"seven.png"];
UIImage *bar = [UIImage imageNamed:@"bar.png"];
for(int i=1; i<=4; i++)
{
UIImageView *sevenView = [[UIImageView alloc] initWithImage:seven];
UIImageView *barView = [[UIImageView alloc] initWithImage:bar];
NSArray *imageViewArray = [[NSArray alloc] initWithObjects:
sevenView,barView,nil];
NSString *fieldName = [[NSString alloc] initWithFormat:@"column%d",i];
[self setValue:imageViewArray forKey:fieldName];
}
}
-(UIView *)pickerView:(UIPickerView *)pickerView
viewForRow:(NSInteger)row
forComponent:(NSInteger)component reusingView:(UIView *)view
{
//NSLog(@"%d",component);
NSLog(@"tag: %d",pickerView.tag);
if(pickerView.tag==1)
{ NSString *arrayName = [[NSString alloc] initWithFormat:@"column%d",component+1];
NSArray *array1 = [self valueForKey:arrayName];
return [array1 objectAtIndex:row];
}
else if(pickerView.tag==2)
{ NSString *arrayName = [[NSString alloc] initWithFormat:@"column%d",component+1];
NSArray *array2 = [self valueForKey:arrayName];
return [array2 objectAtIndex:row];
}
else
{ NSString *arrayName = [[NSString alloc] initWithFormat:@"column%d",component+1];
NSArray *array3 = [self valueForKey:arrayName];
return [array3 objectAtIndex:row];
}
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning]; // Releases the view if it doesn't have a superview
// Release anything that's not essential, such as cached data
}
- (void)dealloc {
}
#pragma mark UIPickerViewDelegate methods
- (NSString*)pickerView:(UIPickerView*)pv titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
return [NSString stringWithFormat:@"%d",row];
}
#pragma mark UIPickerViewDataSource methods
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView*)pv
{
return 4;
}
- (NSInteger)pickerView:(UIPickerView*)pv numberOfRowsInComponent:(NSInteger)component
{
return 2;
}
@end
Views can only have one parent. But you are trying to use each view for 3 parents (the 3 pickers). Regardless of the picker, you try to use the same set of image views for component X of each picker. That won't work.
You need three sets of arrays, not just the one set. In other words, you can't share views between the pickers.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.