2014-09-28 55 views
1

我一直在努力几个小时,以添加一个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; 
} 

回答

1

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

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

+0

谢谢。这很有帮助。我花了一些时间来弄清楚如何配置标签,但现在它的工作! :) – 2014-09-29 09:18:46

相关问题