2013-10-03 38 views
5

此問題在iOS7中使用新的UIPickerView控制器開始發生。要在UIPickerView控制器使用的圖片,你必須使用委託方法返回一個圖像:iOS7 UIPickerView無法正確顯示帶圖像的自定義視圖

pickerView:viewForRow:forComponent:reusingView:

的問題是,屏幕隨後顯示出各種奇怪的行爲 - 圖像在控制檯上下移動手指時,視圖消失。

+0

有一個比你的答案稍微簡單的方法。對我來說還不夠好,但已經指出了我的正確方向。 – Goz

+0

我發現了一個問題的描述,它給出了有關UIPickerView不顯示「正確」的含義的更多細節:有兩個問題。首先,當您在手柄上下移動手指時,圖像視圖消失。其次,在選擇區域(中間條紋)中沒有任何東西可以顯示,它是空白的。來源:[鏈接](http://forums.xamarin.com/discussion/9138/ios7-uipickerview-not-display-custom-views-with-images) –

回答

13

這是張貼在開發論壇,其工作方式的iOS 7.0.2的解決方案:

- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view 
{ 
    // self.myImages is an array of UIImageView objects 
    UIView * myView = [self.myImages 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; 
} 
+2

這工作得很好。謝謝! –

+2

有什麼想法這裏發生了什麼?也許是開發論壇的鏈接? – QED

+0

謝謝你的解決方案....但爲什麼我們應該做這一切的混亂,而不是簡單地返回'UIImageView'對象?我的意思是,我們是否有可能在7.0.4中仍然有這種奇怪的行爲? –

3

有一種更簡單的方式來做到這一點比埃德Trujilo的方法(假設你正在使用的UIImageView的但是...我相信Ed的方法應該適用於任何UIView)。

- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view 
{ 
    return [[UIImageView alloc] initWithImage: [mpSelections[row] image]]; 
} 
+0

@Goz的這個解決方案爲我工作。但是我花了一段時間才瞭解解決方案。重要的方面似乎是你必須實例化一個新的'UIImageView'並將圖像放入它。在我明白這一點之前,我只是返回緩存在數組上的UIImageView。 –