2013-10-03 5 views
5

Ten problem zaczął się dziać w iOS7 z nowym kontrolerem UIPickerView. Aby użyć wizerunki w kontrolerze UIPickerView należy użyć metody delegata, aby powrócić obraz:iOS7 UIPickerView nie wyświetla prawidłowo niestandardowych widoków ze zdjęciami

pickerView: viewForRow: forComponent: reusingView:

Problem polega na tym, że ekran następnie wykazuje różnego rodzaju dziwne zachowanie - zdjęcie widoki znikają w miarę przesuwania palca w górę iw dół kontrolki.

+0

Jest nieco prostszy sposób robienia tego niż odpowiedź. Nie dość dobre dla mnie, ale wskazał mi w dobrym kierunku. – Goz

+0

Znalazłem opis problemu, który daje nieco więcej szczegółów na temat tego, co rozumie się przez UIPickerView nie wyświetla "prawidłowo": Są dwa problemy. Po pierwsze, widoki obrazu znikają po przesunięciu palca w górę iw dół kontrolki. Po drugie, nic nie może być wyświetlone w obszarze wyboru (środkowy pasek), jest puste. Źródło: [link] (http://forums.xamarin.com/discussion/9138/ios7-uipickerview-not-display-custom-views-with-images) –

Odpowiedz

13

Jest to rozwiązanie zamieszczone na forum dev, który działa jak 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

To działa bardzo dobrze. Dziękuję Ci! –

+2

Czy masz pojęcie, co się tutaj dzieje? Być może link do forum dev? – QED

+0

Dziękuję za rozwiązanie .... ale dlaczego do cholery powinniśmy zrobić cały ten bałagan zamiast po prostu zwrócić obiekt 'UIImageView'? Mam na myśli, czy to możliwe, że nadal mamy dziwne zachowanie w wersji 7.0.4? –

3

Jest znacznie prostszy sposób to zrobić niż metody Eda Trujilo za (zakłada używasz UIImageView na jednak ... Metoda Eda powinna działać dla dowolnego UIView, jak sądzę).

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

To rozwiązanie z @Goz działało dla mnie. Ale zrozumienie rozwiązania zajęło mi trochę czasu. Ważnym aspektem wydaje się być to, że musisz utworzyć nowy "UIImageView" i umieścić w nim obraz. Zanim to zrozumiałem, właśnie zwróciłem 'UIImageView', który był buforowany na tablicy. –