UICollectionView 사용 매듭

8897 단어 ios

UICollection ViewFlow Layout 클래스는 구체적인 레이아웃 대상으로 하나의 위젯을 그룹으로 구성할 수 있다(각 그룹마다 선택할 수 있는 눈썹과 꼬리 보기) 격자가 있다.이 부품들은 집합 보기에서 한 줄에서 다음 줄 또는 한 열로 다음 열(스크롤 방향에 따라)으로 흐르며 각 단원은 같은 사이즈나 다른 사이즈가 될 수 있다.
하나의 흐름 레이아웃은 보기를 집합하는 의뢰를 통해 각 그룹의 위젯, 머리와 밑부분의 사이즈 크기를 결정합니다. 이 의뢰 대상은 UICollection View Delegate Flow Layout 프로토콜을 실행해야 합니다. 이 프로토콜을 통해 레이아웃 정보에 동적으로 적응할 수 있습니다. 만약에 의뢰 대상을 제공하지 않았다면 흐름 레이아웃은 당신이 설정한 이 속성의 기본값을 사용할 것입니다.
스트림 레이아웃은 컨텐트 뷰를 고정된 거리로 배치하는 반면 다른 방향에서는 스크롤 가능한 거리입니다. 예를 들어 수직 스크롤 메쉬에서는 컨텐트 뷰의 높이가 메쉬의 그룹과 셀의 개수 메쉬 컨텐트 뷰에 동적으로 적응할 때 해당 컬렉션 뷰의 너비가 제한됩니다.레이아웃은 기본적으로 수직 스크롤로 설정되어 있으며, 스크롤ldirection 속성을 사용하여 스크롤 방향을 설정할 수도 있습니다.
흐름 레이아웃의 모든 그룹은 자신의 머리와 밑부분을 가지고 있습니다. 머리와 밑부분의 보기를 얻으려면 머리와 밑부분의 사이즈를 0이 아닌 값으로 설정해야 합니다. 그에 상응하는 의뢰 방법을 통해 설정할 수도 있고, 그에 상응하는 속성 값을 설정해서 설정할 수도 있습니다. (Header Reference Size와 footer Reference Size) 사이즈가 0이면그러면 상응하는 머리와 밑부분 보기는 집합 보기에 추가되지 않습니다.
//열 간격
@property (nonatomic) CGFloat minimumLineSpacing;
//행 간격 @property(nonatomic) CGFloat minimumInteritemSpacing;
//cell 크기 @property(nonatomic) CGSize itemSize;
//예상cell 크기 @property(nonatomic) CGSize estimatedItemSize NSAVAILABLE_IOS(8_0);//defaults to CGSizeZero - setting a non-zero size enables cells that self-size via -perferredLayoutAttributesFittingAttributes:
//스크롤 방향(수평 또는 수직) @property(nonatomic) UICollection ViewScrollDirection scrollDirection;//default is UICollectionViewScrollDirectionVertical
//머리 크기 @property(nonatomic) CGSize header Reference Size;
//아래쪽 크기 @property(nonatomic) CGSize footer Reference Size;
//그룹의 가장자리 크기 @property(nonatomic) UIedgeInsets sectionInset;
UICollectionViewDelegateFlowLayout 프로토콜
//각 셀의 크기
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath;
//그룹당 모서리 치수
- (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section;
/그룹당/열 간격
- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout minimumLineSpacingForSectionAtIndex:(NSInteger)section;
//그룹당 행 간격
- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout minimumInteritemSpacingForSectionAtIndex:(NSInteger)section;
//그룹당 헤드 크기
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout referenceSizeForHeaderInSection:(NSInteger)section;
//그룹당 아래쪽 치수
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout referenceSizeForFooterInSection:(NSInteger)section;
UICollectionView를 만들고 - (instancetype) initWithFrame: (CGRect) frame collection ViewLayout: (UICollection ViewLayout *) layout을 통해 생성합니다.집합 보기를 만드는 방법입니다.layout이 비어 있을 수 없습니다.
        UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc]init];
        flowLayout.scrollDirection = UICollectionViewScrollDirectionVertical;
//       headview
        flowLayout.headerReferenceSize = CGSizeMake(self.frame.size.width, 30);
        CGRect rect = self.bounds;
        rect.origin.x = rect.size.width * count;
        
        UICollectionView *collectionView = [[UICollectionView alloc]initWithFrame:rect collectionViewLayout:flowLayout];
        collectionView.backgroundColor = [UIColor whiteColor];
        [collectionView registerClass:[LaunchCollectionViewCell class] forCellWithReuseIdentifier:CellIdentifier];
//       headview
        [collectionView registerClass:[UICollectionReusableView class] forSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@"ReusableView"];
        collectionView.showsHorizontalScrollIndicator = NO;
        collectionView.showsVerticalScrollIndicator = NO;
        collectionView.pagingEnabled = NO;
        collectionView.scrollEnabled = NO;
        collectionView.dataSource = self;
        collectionView.delegate = self;
        [scrollView addSubview:collectionView];

UItableView와 유사하게 두 개의 프로토콜을 실현하는 UICollectionViewDelegate와 UICollectionViewDataSource
UICollectionViewDataSource
//그룹당 셀 수
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section;//셀 보기를 만듭니다.//여기의cell은 - dequeue Reusable Cell With Reuse Identifier: for Index Path: 방법으로 다시 사용할 셀을 검색해야 합니다.또한 UICollectionView를 만들 때 - registerClass: forCellWithReuseIdentifier: 또는registerNib: forCellWithReuseIdentifier: 방법으로 등록된 표시자는 일치해야 합니다 - (UICollectionView *) collectionView: (UICollectionView *)collectionView cellForItem AtIndexPath: (NSIndexPath *)그룹 수 - (NSInteger)numberOfSectionsInCollectionView: (UICollectionView*)collectionView;//머리나 밑에 보기를 만듭니다//여기 보기는 - dequeue Reusable Supplementary View OfKind: with Reuse Identifier: for Index Path: 방법으로 다시 사용할 보기를 검색해야 합니다.다시 사용할 수 있는 표시부호는 UICollectionView를 만들 때register Class: forSupplementaryViewViewView를 통해 ViewViewViewView: forSupplementaryViewClass: forSupplementaryViewOKind: withReuseIdentifier: 방법으로 등록된 표시부호가 일치해야 한다. - (UICollectionReusableView*) collectionary Nib: (UICollectional lection* View) collectionView: (UICollection * * *) collectiontionView collectionView collectionView) collectionView CollectionView SupplectionView Supplementary Kinmenty dexPath *) indexPath,
UICollectionViewDelegate
- (BOOL)collectionView:(UICollectionView *)collectionView shouldHighlightItemAtIndexPath:(NSIndexPath *)indexPath; - (void)collectionView:(UICollectionView *)collectionView didHighlightItemAtIndexPath:(NSIndexPath *)indexPath; - (void)collectionView:(UICollectionView *)collectionView didUnhighlightItemAtIndexPath:(NSIndexPath *)indexPath; - (BOOL)collectionView:(UICollectionView *)collectionView shouldSelectItemAtIndexPath:(NSIndexPath *)indexPath; - (BOOL)collectionView:(UICollectionView *)collectionView shouldDeselectItemAtIndexPath:(NSIndexPath *)indexPath;//called when the user taps on an already-selected item in multi-select mode - (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath; - (void)collectionView:(UICollectionView *)collectionView didDeselectItemAtIndexPath:(NSIndexPath *)indexPath; - (void)collectionView:(UICollectionView *)collectionView willDisplayCell:(UICollectionViewCell *)cell forItemAtIndexPath:(NSIndexPath *)indexPath NS_AVAILABLE_IOS(8_0); - (void)collectionView:(UICollectionView *)collectionView willDisplaySupplementaryView:(UICollectionReusableView *)view forElementKind:(NSString *)elementKind atIndexPath:(NSIndexPath *)indexPath NS_AVAILABLE_IOS(8_0); - (void)collectionView:(UICollectionView *)collectionView didEndDisplayingCell:(UICollectionViewCell *)cell forItemAtIndexPath:(NSIndexPath *)indexPath; - (void)collectionView:(UICollectionView *)collectionView didEndDisplayingSupplementaryView:(UICollectionReusableView *)view forElementOfKind:(NSString *)elementKind atIndexPath:(NSIndexPath *)indexPath; //These methods provide support for copy/paste actions on cells.//All three should be implemented if any are. - (BOOL)collectionView:(UICollectionView *)collectionView shouldShowMenuForItemAtIndexPath:(NSIndexPath *)indexPath; - (BOOL)collectionView:(UICollectionView *)collectionView canPerformAction:(SEL)action forItemAtIndexPath:(NSIndexPath *)indexPath withSender:(id)sender; - (void)collectionView:(UICollectionView *)collectionView performAction:(SEL)action forItemAtIndexPath:(NSIndexPath *)indexPath withSender:(id)sender; //support for custom transition layout - (UICollectionViewTransitionLayout *)collectionView:(UICollectionView *)collectionView transitionLayoutForOldLayout:(UICollectionViewLayout *)fromLayout newLayout:(UICollectionViewLayout *)toLayout;
이 밖에 UICollectionView는 다음과 같은 방법을 통해 간단한 수정을 실현할 수 있다
//그룹의 단위로 스크롤
- (void)scrollToItemAtIndexPath:(NSIndexPath *)indexPath atScrollPosition:(UICollectionViewScrollPosition)scrollPosition animated:(BOOL)animated; //These methods allow dynamic modification of the current set of items in the collection view
//특정 그룹 삽입 - (void) insertSections: (NSIndexSet *) 섹션
//일부 그룹 삭제 - (void) deleteSections: (NSIndexSet*) 섹션
//일부 그룹 - (void)reloadSections: (NSIndexSet*)sections를 다시 로드합니다.
//이동 그룹 - (void) moveSection: (NSInteger) section toSection: (NSInteger) new Section;
//일부 셀 추가 - (void) insertItemsAtIndexPaths: (NSArray *) indexPaths
//일부 셀 삭제 - (void) deleteItemsAtIndexPaths: (NSArray *) indexPaths
(void) reloadItemsAtIndexPaths: (NSArray*) indexPaths
//셀 이동 - (void) moveItem AtIndexPath: (NSIndexPath *) indexPath toIndexPath: (NSIndexPath *) newIndexPath;
데모 주소:
http://download.csdn.net/detail/junjun150013652/8577111

좋은 웹페이지 즐겨찾기