Komórka UICollectionView nie zawsze jest odświeżana po przewinięciu
Zdefiniowałem w moim Storyboard (iPad) widok, który zawieraUICollectionView
u dołu widoku znajduje się także aUIToolbar
. wUICollectionView
DodałemUICollectionViewCell
(realizowane przez aniPadCellCollectionViewCell
klasa), która zawiera inny widok, który jest wykresem Core-Plot (aCPTGraphHostingView
klasa).
Mam klasę o nazwie X, która implementujeUICollectionViewDelegate
iUICollectionViewDataSource
.
W klasie X buduję dla każdej komórki mojego widoku (wViewDidLoad
) Wykres Core-Plot i ja mamy następujący kod, aby powiązać wykres z komórkąUICollectionViewCell
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
static NSString* cellId = @"ChartCollectionId";
iPadCellCollectionViewCell* cell = [self.theCollectionView dequeueReusableCellWithReuseIdentifier:cellId forIndexPath:indexPath];
MyChart* chart = [_charts objectAtIndex:indexPath.row];
cell.hostingView.hostedGraph = chart.barChart;
return cell;
}
Działa dobrze, wszystkie moje wykresy są poprawnie wyświetlane na ekranie. Problem występuje, gdy użytkownik przewija widok, a następnie jedna lub kilka komórek staje się „pusta”. Naprawdę nie rozumiem dlaczego.
Znalazłem obejście, zamiast dodawaćCPTGraphHostingView
wUICollectionViewCell
w Konstruktorze interfejsów sam go tworzę, a poprzedni kod to:
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
static NSString* cellId = @"ChartCollectionId";
iPadCellCollectionViewCell* cell = [self.theCollectionView dequeueReusableCellWithReuseIdentifier:cellId forIndexPath:indexPath];
[cell.contentView addSubview:[_hostingViews objectAtIndex:indexPath.row]];
return cell;
}
Z tym kodem wszystko działa dobrze. Czy są jakieś wyjaśnienia, dlaczego nie działa, gdy dodamCPTGraphHostingView
wUICollectionViewCell
z IB?
Czy wywołanie „addSubview” jest problemem przy każdym wywołaniu metody? Nie ma przecieków pamięci?