2012-11-04 30 views
9

Tôi vừa mới bắt đầu chơi xung quanh với UICollectionView lần đầu tiên. Dường như làm việc độc đáo, nhưng có một vấn đề và một câu hỏi về nó.UICollectionView registerCell - Các ô trống

tôi đã thiết lập UICollectionView tôi như dưới đây và với một tế bào tùy chỉnh:

- (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); 
} 

Vì vậy, đây là tất cả các dandy, tuy nhiên tôi đã thêm dòng này để viewDidLoad:

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

Đây là gây rắc rối và tôi không hiểu tại sao. Khi tôi bật dòng này, tất cả các ô của tôi sẽ trống. Làm thế nào mà? Tôi đang thiếu gì? Ngoài ra, như tôi hiểu, nếu dòng đó cho phép các tế bào tái sử dụng, tại sao tôi phải có chế độ xem bộ sưu tập chứ không phải ở chế độ xem bảng?

Bất kỳ trợ giúp kỹ thuật hoặc giải thích nào được đánh giá cao, cảm ơn.

+0

làm thế nào bạn thiết lập cấu hình riêng cho di động? lập trình trong phân lớp của bạn? – jackslash

+0

Tôi đã thiết lập nó trong Bảng phân cảnh của mình. Tôi có một UICollectionView với một ô duy nhất, ô đó có mã định danh của nó, lớp tùy chỉnh được nối và gắn nhãn trong đó. –

Trả lời

24

Bảng phân cảnh của bạn sẽ tự động đăng ký ô bạn đã thiết kế trong bảng phân cảnh cho số nhận dạng sử dụng lại mà bạn đã chỉ định cho ô đó trong ngăn bên phải trong trình tạo giao diện. Bằng cách đăng ký lại lớp học của bạn cho định danh tái sử dụng đó, khung nhìn bộ sưu tập chỉ đơn giản gọi cấp phát init trên lớp con của bạn và dự kiến ​​khung nhìn sẽ được thiết lập theo chương trình.

Từ the documentation:

Nếu trước đó bạn đã đăng ký một lớp tập tin hoặc nib với cùng định tái sử dụng , lớp bạn chỉ định trong tham số cellClass thay thế mục cũ. Bạn có thể chỉ định nil cho cellClass nếu bạn muốn hủy đăng ký lớp khỏi định danh tái sử dụng được chỉ định.

Nếu bạn muốn thiết kế tế bào bên ngoài của storyboard bạn có thể thiết lập giao diện của bạn lập trình hoặc thiết lập một ô trong một xib riêng biệt và sau đó gọi

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

Trong trường hợp bắt buộc nib có một chế độ xem cấp cao nhất là một ô của lớp con tùy chỉnh của bạn với mã định danh sử dụng lại được đặt trong trình tạo giao diện.

+0

Vì vậy, nói của bạn tôi chỉ có thể thiết kế trực quan tế bào của tôi từ một xib và sử dụng phương pháp bạn đề nghị, nếu không tôi phải tạo nó theo chương trình? –

+1

hoặc bạn có thể thiết kế chúng trong bảng phân cảnh bằng cách thêm ô mẫu vào chế độ xem bộ sưu tập. bảng câu chuyện đăng ký ô đó tự động cho bạn và sử dụng lại được bật. – jackslash

+0

thats lý do tại sao nó đi trống khi bạn gọi 'registerClass:', bạn đang unsetting những thứ bạn đã làm trong bảng phân cảnh. Nó cũng lý do tại sao nó hoạt động mà không có dòng.Chế độ xem bộ sưu tập không hoạt động mà không có một số loại tế bào tái sử dụng được chỉ định – jackslash

0

Di

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

Đối với storyboards chúng ta không cần dòng này

+0

Có câu trả lời √ –

Các vấn đề liên quan