如何在多个组件的UIPickerView中为特定组件添加图像?
问题描述:
我一直在努力几个小时,以添加一个UIPickerView
与4个组件。其中三个组件应该显示来自三个不同的NSArray
的字符串数据,但对于第四个组件,我试图添加图像。如何在多个组件的UIPickerView中为特定组件添加图像?
在另一个SO-thred我读到这个方法:
- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view
{
// return aUIView;
}
它返回UIViews,这在我的情况下,将是一个ImageView的。
我已经设法显示我的imagesViews存储在我的图像数组,但只有当我在我的选择器视图中有一个组件。
我如何将这与其他三个组件不应该返回一个UIView,但只是一些字符串值?
这是有我在我的.m
走到这一步:
- (void)viewDidLoad
{
[super viewDidLoad];
// Four Arrays with some data
self.contractLevelArray = ...someStringObjects...
self.imageViewsWithImagesForSuitArray =...someUIImageViewObjectsWithImages...
self.doubleOrRedoubleArray = ...someStringObjects...
self.contractByPlayerArray = ...someStringObjects...
}
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
{
return 4;
}
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{
if (component == 0) {
return self.contractLevelArray.count;
} else if (component == 1) {
return self.imageViewsWithImagesForSuitArray.count;
} else if (component == 2) {
return self.contractByPlayerArray.count;
} else {
return self.doubleOrRedoubleArray.count;
}
}
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
if (component == 0) {
return [self.contractLevelArray objectAtIndex:row];
} else if (component == 1) {
// For this component i want to return the UIImageViews for my images
} else if (component == 2) {
return [self.contractByPlayerArray objectAtIndex:row];
} else {
return [self.doubleOrRedoubleArray objectAtIndex:row];
}
}
- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view
{
// self.myImages is an array of UIImageView objects
UIView *myView = [self.imageViewsWithImagesForSuitArray objectAtIndex:row];
// first convert to a UIImage
UIGraphicsBeginImageContextWithOptions(myView.bounds.size, NO, 0);
[myView.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage * image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
// then convert back to a UIImageView and return it
UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
return imageView;
}
答
您不能同时使用viewForRow
和titleForRow
。在你的情况下,只使用viewForRow
。
对于图像组件,返回图像视图。对于其他人,请使用所需的文本返回标签。
谢谢。这很有帮助。我花了一些时间来弄清楚如何配置标签,但现在它的工作! :) – 2014-09-29 09:18:46