2012-11-04 12 views
9

Właśnie zacząłem bawić się z UICollectionView po raz pierwszy. Wydaje się działać ładnie, ale ma problem i pytanie na jego temat.UICollectionView registerCell - puste komórki

mam setup UICollectionView jak poniżej iz komórki niestandardowe:

- (NSInteger)collectionView:(UICollectionView *)view numberOfItemsInSection:(NSInteger)section 
{ 
    return 10; 
} 

- (NSInteger)numberOfSectionsInCollectionView: (UICollectionView *)collectionView 
{ 
    return 1; 
} 

- (UICollectionViewCell *)collectionView:(UICollectionView *)cv cellForItemAtIndexPath:(NSIndexPath *)indexPath 
{ 
    ContactCell *cell = [cv dequeueReusableCellWithReuseIdentifier:@"Cell" forIndexPath:indexPath]; 
    cell.nameLbl.text = @"text"; 

    return cell; 
} 

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath 
{ 
    return CGSizeMake(145, 95); 
} 

- (UIEdgeInsets)collectionView: 
(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section 
{ 
    return UIEdgeInsetsMake(10, 10, 10, 10); 
} 

Więc to wszystko jest dandys, jednak dodałem ta linia do viewDidLoad:

[collectionView registerClass:[ContactCell class] forCellWithReuseIdentifier:@"Cell"]; 

To powoduje kłopoty i nie rozumiem dlaczego. Po włączeniu tej linii wszystkie moje komórki zostają puste. Dlaczego? czego mi brakuje?

Ponadto, jak rozumiem, jeśli linia ta umożliwia komórkach wielokrotnego użytku, dlaczego muszę z widoku kolekcji vs nie mając w widoku tabeli?

Każda pomoc techniczna lub objaśniająca doceniona, dzięki.

+0

jak ty konfigurowania widok na komórce? programowo w twojej podklasie? – jackslash

+0

Ustawiłem to w mojej Storyboard. Mam UICollectionView z pojedynczej komórki, że komórka ma swój identyfikator, niestandardowe klasy podłączone i etykiety w nim. –

Odpowiedz

24

Scenariusz automatycznie rejestruje komórkę zaprojektowaną w scenorysie dla identyfikatora ponownego użycia określonego dla tej komórki w okienku po prawej stronie w narzędziu do tworzenia interfejsu. Ponownie rejestrując swoją klasę dla tego ponownego użycia, widok kolekcji po prostu wywołuje alokację init na podklasie i oczekuje, że widok zostanie ustawiony programowo.

Od the documentation:

Jeśli wcześniej zarejestrowany plik klasy lub stalówka z tym samym identyfikatorem ponowne klasa można określić w parametrze cellClass zastępuje starego wejścia. Możesz określić zero dla cellClass, jeśli chcesz wyrejestrować klasę z podanego identyfikatora ponownego użycia.

Jeśli chcesz zaprojektować komórkom zewnątrz ujęć można albo konfiguracja interfejsu programowego lub założyć komórkę oddzielna xib a następnie zadzwonić

- (void)registerNib:(UINib *)nib forCellWithReuseIdentifier:(NSString *)identifier

Gdzie moszczu stalówka mają jeden widok najwyższego poziomu, który jest komórką Twojej niestandardowej podklasy z prawym identyfikatorem ponownego użycia ustawionym w narzędziu do tworzenia interfejsu.

+0

Więc twoje zdanie, że mogę tylko wizualnie zaprojektować moją komórkę z Xib i użyć metody, którą sugerujesz, inaczej muszę stworzyć programowo? –

+1

lub możesz zaprojektować je w serii ujęć, dodając komórki prototypów do widoku kolekcji. plansza historii rejestruje, że komórka automatycznie dla ciebie i ponowne użycie jest włączona. – jackslash

+0

to dlatego, że po wpisaniu 'registerClass: 'staje się puste, niszczysz rzeczy, które zrobiłeś w scenorysie. To także dlatego, że działa bez linii.Widoki kolekcji nie będą działać bez określonej komórki do ponownego wykorzystania określonej – jackslash

0

Usuń

[self.collectionview registerClass:[NewCell class] forCellWithReuseIdentifier:@"Cell"]; 

Dla storyboardów nie potrzebujemy tej linii

+0

Tak, to jest odpowiedź √ –

Powiązane problemy