如何在具有多个组件的 UIPickerView 中为特定组件添加图像?
Posted
技术标签:
【中文标题】如何在具有多个组件的 UIPickerView 中为特定组件添加图像?【英文标题】:How do i add images for a specific component in a UIPickerView with several components? 【发布时间】:2014-09-28 21:16:51 【问题描述】:我已经尝试了几个小时来添加带有 4 个组件的 UIPickerView
。其中三个组件应该显示来自三个不同NSArray
的字符串数据,但对于第四个组件,我正在尝试添加图像。
在另一个 SO-thred 中,我读到了这种方法:
- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view
// return aUIView;
返回 UIViews,在我的例子中是一个 ImageView。
我已设法显示存储在图像数组中的图像视图,但前提是我的选择器视图中有一个组件。
如何将它与其他三个不应该返回 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;
【问题讨论】:
【参考方案1】:您不能同时使用viewForRow
和titleForRow
。在你的情况下,只使用viewForRow
。
对于图像组件,返回图像视图。对于其他人,返回带有所需文本的标签。
【讨论】:
谢谢。这很有帮助。我花了一些时间来弄清楚如何配置标签,但现在它正在工作! :)以上是关于如何在具有多个组件的 UIPickerView 中为特定组件添加图像?的主要内容,如果未能解决你的问题,请参考以下文章
具有三个组件的自定义 UIPickerView,每个组件在选择指示器上显示标签
如何使用 didSelectRow 为多个 UIPickerView 使用数据