ios - 如何在具有多个组件的 UIPickerView 中为特定组件添加图像?

标签 ios objective-c ios7 uipickerview

我已经尝试了几个小时来添加一个包含 4 个组件的 UIPickerView。其中三个组件应该显示来自三个不同 NSArray 的字符串数据,但对于第四个组件,我正在尝试添加图像。

在另一个 SO-thred 中我读到了这个方法:

- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view
{
   // return aUIView;
}

它返回 UIView,在我的例子中是一个 ImageView。

我已经设法显示存储在我的图像数组中的 ImageView ,但前提是我的选择器 View 中有一个组件。

我如何将它与其他三个不应该返回 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;
}

最佳答案

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

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

关于ios - 如何在具有多个组件的 UIPickerView 中为特定组件添加图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26089745/

相关文章:

ios - 尝试为应该调整字符串的属性制作包装器

objective-c - 我如何将 NSString 转换为长值?

ios - 移动相机层位置 ios 7

ios - 应用程序首次启动时 3D Touch 快速操作不起作用

ios - 为什么在我添加自动布局约束时我的 textview 不显示?

objective-c - 使用分段控件过滤 TableView 的部分

iphone - 寻找 Iphone 教程应用程序来搜索我所在位置附近的 field

ios - Assets 目录未在项目中使用

ios - iphone 在检测到接近传感器时振动多次但仅振动一次

ios - NSSortDescriptor 以随机格式对数据进行排序