如何在具有多个组件的 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】:

您不能同时使用viewForRowtitleForRow。在你的情况下,只使用viewForRow

对于图像组件,返回图像视图。对于其他人,返回带有所需文本的标签。

【讨论】:

谢谢。这很有帮助。我花了一些时间来弄清楚如何配置标签,但现在它正在工作! :)

以上是关于如何在具有多个组件的 UIPickerView 中为特定组件添加图像?的主要内容,如果未能解决你的问题,请参考以下文章

具有三个组件的自定义 UIPickerView,每个组件在选择指示器上显示标签

如何正确禁用 UIPickerView 组件滚动?

如何使用 didSelectRow 为多个 UIPickerView 使用数据

iOS 7 UIPickerView 非选中行曲率修改多个组件

获取 UIPickerView 中每个组件的选定行

如何在 UIPickerView 中选择不同组件的完整行?