2013-03-03 10 views
63

Kiedy próbuję umieścić UICollectionCell w UICollectionView w konstruktorze interfejsów, nie mogę umieścić go z nieznanych powodów. Komórka ma paska narzędzi bez dodawania do UICollectionViewUICollectionView Dodawanie UICollectionCell

Używam:

  • iOS SDK 6.0
  • XCode 4.5.1
  • nie używam Storyboard
+0

[Oto prosty przewodnik] (http://stackoverflow.com/a/31735229/3681880) do tworzenia "UICollectionViewCell" w "UICollectionView". – Suragch

Odpowiedz

130

Tylko UICollectionView wewnątrz Storyboard mieć UICollectionViewCell wewnątrz. Jeśli używasz XIB, utwórz nowy XIB z CellName.xib, dodaj do niego CollectionViewCell, podaj nazwę niestandardowej klasy UICollectionView. Następnie użyj registerNib.

Przykładowy kod: https://github.com/lequysang/TestCollectionViewWithXIB

+0

@NAQ okej, jak wykorzystujesz swoją klasę? upewnij się, że zarejestrowałeś swoją końcówkę, która jest połączona z klasą, ale klasa initWithFrame nie jest wywoływana. więc jeśli nie możesz zrobić dodatkowej stylizacji na swoich gniazdach xib na init. jaka jest korzyść z posiadania klasy MyCell w tym przykładzie? – topwik

+1

initWithFrame nie działają w żadnej komórce Xib. Podłącz IBOutlet do MyCell.h i wywołaj inne metody w awakeFromNib. –

+6

Jestem zaskoczony, że Apple nie był na tyle uprzejmy, aby o tym wspomnieć w dokumentacji. -1 godz. Mojego życia. – expert

18

Nie można umieścić UICollectionViewCell bezpośrednio w UiCollectionView, jeśli używasz pliku Xib. Jest to możliwe tylko w scenorysie. Dodaj UICollectionViewCell do osobnego pliku Xib. Podaj swoje imię i nazwisko. Następnie zarejestrować albo klasę lub XIb zanim pojawi się widok kolekcja

[self.collectionView registerClass:[CollectionViewCell class] forCellWithReuseIdentifier:CELL_ID]; 

Zazwyczaj odbywa się w viewDidLoad.

Jest to realizacja niestandardowych UICollectionViewCell zz użyciem Xib

@implementation CollectionViewCell 
@synthesize imageView = _imageView; 

- (id)initWithFrame:(CGRect)frame 
{ 
self = [super initWithFrame:frame]; 
if (self) { 

    self.backgroundColor = [UIColor whiteColor]; 
    self.layer.shadowColor = [UIColor blackColor].CGColor; 
    self.layer.shadowRadius = 5.0f; 
    self.layer.shadowOffset = CGSizeMake(2.0f, 2.0f); 
    self.layer.shadowOpacity = 0.5f; 

    // Selected background view 
    UIView *backgroundView = [[UIView alloc]initWithFrame:self.bounds]; 
    backgroundView.layer.borderColor = [[UIColor colorWithRed:0.529 green:0.808 blue:0.922 alpha:1]CGColor]; 
    backgroundView.layer.borderWidth = 10.0f; 
    self.selectedBackgroundView = backgroundView; 

    // set content view 
    CGRect frame = CGRectMake(self.bounds.origin.x+5, self.bounds.origin.y+5, self.bounds.size.width-10, self.bounds.size.height-10); 
    UIImageView *imageView = [[UIImageView alloc] initWithFrame:frame]; 
    self.imageView = imageView;   
    [imageView release]; 
    self.imageView.contentMode = UIViewContentModeScaleAspectFill ; 
    self.imageView.clipsToBounds = YES; 
    [self.contentView addSubview:self.imageView];  

} 
return self; 
} 
+0

co zrobiłbyś, jeśli używasz xib, do którego przypisujesz klasę? Mam klasę UICollectionViewCell jako niestandardową klasę mojej komórki xib. i registerNib zNibName firCellWithResueIdentifier in viewDidLoad (ponownie xib jest połączony/połączony z klasą komórki). Czy mogę połączyć układ XIB z dodatkową personalizacją wykonaną w kodzie przy użyciu mojej klasy komórek? nie wygląda na to, że prosty przepływ wywoła initWithFrame na klasie, jeśli po prostu zarejestrujesz stalówkę.czy muszę rejestrować zarówno stalówkę jak i klasę w moim widoku kolekcji? – topwik

+0

@towpse Zamień initWithFrame na awakeFromNib w Cell.m. Nie zwracaj –

+0

@towpse Co powiedział NAQ ma rację. Zarejestruj stalówkę. Następnie dla dodatkowej personalizacji użyj initWithCoder lub awakeFromNib swojej niestandardowej komórki (w komórce.m) –

0

Ok. W rzeczywistości istnieje obejście tego problemu, jeśli naprawdę chcesz mieć komórkę w kolekcjiView wewnątrz pliku Xib z programu budującego interfejs:

  1. Utwórz scenorys.
  2. Utwórz UICollectionView i UICollectionViewCell z budowniczego interfejsu.
  3. Dostosuj interfejs użytkownika za pomocą wiązań itp., Aby wyglądał dokładnie tak, jak chcesz.
  4. Utwórz nowy plik XIB.
  5. Skopiuj wszystko wewnątrz scenorysu do nowego pliku XIB.

Będzie działać idealnie.

  • Jedną rzeczą, aby pamiętać, że krok nr 3 jest bardzo ważne, ponieważ po # 5 nie mają przeciągnij i poruszania się po UICollectionView, jeśli nie, komórka będzie magicznie znikają! Poza tym, po prostu działa idealnie.
Powiązane problemy