iOS - UICollectionView的使用(一)

一.簡(jiǎn)單介紹

UICollectionView 這個(gè)類是iOS6 新引進(jìn)的API,它的布局更加靈活,簡(jiǎn)單來(lái)說(shuō)就是多列的UITableView,那么UICollectionView的實(shí)現(xiàn)和UITableView的實(shí)現(xiàn)基本一樣酣倾,也是存在datasource和delegate的意荤,其中datasource為view提供數(shù)據(jù)源洛勉,告訴view要顯示些什么東西以及如何顯示它們邻邮,delegate提供一些樣式的小細(xì)節(jié)以及用戶交互的相應(yīng),除此之外UICollectionView還有一個(gè)不得不提的就是UICollectionViewLayout。

二.UICollectionView里面常用的方法(列舉其中常用的征绎,具體的請(qǐng)查看相關(guān)的API)

/** 使用class或者xib注冊(cè)UICollectionViewCell*/
- (void)registerClass:(nullable Class)cellClass forCellWithReuseIdentifier:(NSString *)identifier;
- (void)registerNib:(nullable UINib *)nib forCellWithReuseIdentifier:(NSString *)identifier;

/** 先會(huì)從緩存池中取,如果沒(méi)有會(huì)自動(dòng)為我們創(chuàng)建cell,而不像之前那樣還要我們自己去創(chuàng)建*/
- (__kindof UICollectionViewCell *)dequeueReusableCellWithReuseIdentifier:(NSString *)identifier forIndexPath:(NSIndexPath *)indexPath;

/** 如果需要給每組的collectionview加上一個(gè)headerView或者footerView的話磨取,就要用到這個(gè)方法人柿,同樣也是先從緩存池中取,沒(méi)有自動(dòng)創(chuàng)建,elementKind是需要?jiǎng)?chuàng)建的是頭部還是底部?jī)煞N類型*/
- (__kindof UICollectionReusableView *)dequeueReusableSupplementaryViewOfKind:(NSString *)elementKind withReuseIdentifier:(NSString *)identifier forIndexPath:(NSIndexPath *)indexPath;

/** 總共多少組*/
- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView;

/** 每組中cell的個(gè)數(shù)*/
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section;

/** 每個(gè)cell的尺寸*/
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath;

/** 頭部的尺寸*/
-(CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout referenceSizeForHeaderInSection:(NSInteger)section;

/** 頂部的尺寸*/
-(CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout referenceSizeForFooterInSection:(NSInteger)section;

/** section的margin*/
- (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section ;

/** 選中某一個(gè)cell*/
- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath;

三.用代碼實(shí)現(xiàn)簡(jiǎn)單的collectionView

#pragma mark -- lazy load
- (UICollectionView *)collectionView {
    if (_collectionView == nil) {
        UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init];
        // 設(shè)置collectionView的滾動(dòng)方向忙厌,需要注意的是如果使用了collectionview的headerview或者footerview的話凫岖, 如果設(shè)置了水平滾動(dòng)方向的話,那么就只有寬度起作用了了
        [layout setScrollDirection:UICollectionViewScrollDirectionVertical];
      // layout.minimumInteritemSpacing = 10;// 垂直方向的間距
     // layout.minimumLineSpacing = 10; // 水平方向的間距
        _collectionView = [[UICollectionView alloc] initWithFrame:self.view.bounds collectionViewLayout:layout];
        _collectionView.backgroundColor = [UIColor whiteColor];
        _collectionView.dataSource = self;
        _collectionView.delegate = self;
    }
    return _collectionView;
}

#pragma mark -- life cycle
- (void)viewDidLoad {
    [super viewDidLoad];
    
    self.navigationItem.title = @"UICollectionView Demo";
    self.navigationController.navigationBar.barTintColor = [UIColor redColor];
    
    [self.view addSubview:self.collectionView];
    
    // 注冊(cè)collectionViewcell:WWCollectionViewCell是我自定義的cell的類型
    [self.collectionView registerClass:[WWCollectionViewCell class] forCellWithReuseIdentifier:@"cell"];
    
    // 注冊(cè)collectionView頭部的view逢净,需要注意的是這里的view需要繼承自UICollectionReusableView
    [self.collectionView registerNib:[UINib nibWithNibName:@"WWCollectionReusableView" bundle:nil] forSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@"header"];
    
    // 注冊(cè)collectionview底部的view,需要注意的是這里的view需要繼承自UICollectionReusableView
    [self.collectionView registerNib:[UINib nibWithNibName:@"WWCollectionFooterReusableView" bundle:nil] forSupplementaryViewOfKind:UICollectionElementKindSectionFooter withReuseIdentifier:@"footer"];
}

#pragma mark -- UICollectionViewDataSource
/** 每組cell的個(gè)數(shù)*/
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
    return 15;
}

/** cell的內(nèi)容*/
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
 WWCollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"cell" forIndexPath:indexPath];
    cell.backgroundColor = [UIColor yellowColor];
    cell.topImageView.image = [UIImage imageNamed:@"1"];
    cell.bottomLabel.text = [NSString stringWithFormat:@"%zd.png",indexPath.row];
    return cell;
}

/** 總共多少組*/
- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView {
    return 6;
}

/** 頭部/底部*/
- (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath{
    
    if ([kind isEqualToString:UICollectionElementKindSectionHeader]) {
        // 頭部
        WWCollectionReusableView *view =  [collectionView dequeueReusableSupplementaryViewOfKind :kind   withReuseIdentifier:@"header"   forIndexPath:indexPath];
        view.headerLabel.text = [NSString stringWithFormat:@"頭部 - %zd",indexPath.section];
        return view;
        
    }else {
        // 底部
        WWCollectionFooterReusableView *view =  [collectionView dequeueReusableSupplementaryViewOfKind :kind   withReuseIdentifier:@"footer"   forIndexPath:indexPath];
        view.footerLabel.text = [NSString stringWithFormat:@"底部 - %zd",indexPath.section];
        return view;
    }
}

#pragma mark -- UICollectionViewDelegateFlowLayout
/** 每個(gè)cell的尺寸*/
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath
{
    return CGSizeMake(60, 60);
}

/** 頭部的尺寸*/
-(CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout referenceSizeForHeaderInSection:(NSInteger)section{
    
   
    return CGSizeMake(self.view.bounds.size.width, 40);
}

/** 頂部的尺寸*/
-(CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout referenceSizeForFooterInSection:(NSInteger)section{
    
    
    return CGSizeMake(self.view.bounds.size.width, 40);
}

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

#pragma mark -- UICollectionViewDelegate
- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {
    NSLog(@"點(diǎn)擊了第 %zd組 第%zd個(gè)",indexPath.section, indexPath.row);
}

四.效果圖

?最基本的collectionView.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末哥放,一起剝皮案震驚了整個(gè)濱河市歼指,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌甥雕,老刑警劉巖踩身,帶你破解...
    沈念sama閱讀 211,743評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異社露,居然都是意外死亡挟阻,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門峭弟,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)附鸽,“玉大人,你說(shuō)我怎么就攤上這事孟害【苎祝” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,285評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵挨务,是天一觀的道長(zhǎng)击你。 經(jīng)常有香客問(wèn)我,道長(zhǎng)谎柄,這世上最難降的妖魔是什么丁侄? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,485評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮朝巫,結(jié)果婚禮上鸿摇,老公的妹妹穿的比我還像新娘。我一直安慰自己劈猿,他們只是感情好拙吉,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,581評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著揪荣,像睡著了一般筷黔。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上仗颈,一...
    開(kāi)封第一講書(shū)人閱讀 49,821評(píng)論 1 290
  • 那天佛舱,我揣著相機(jī)與錄音,去河邊找鬼挨决。 笑死请祖,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的脖祈。 我是一名探鬼主播肆捕,決...
    沈念sama閱讀 38,960評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼盖高!你這毒婦竟也來(lái)了慎陵?” 一聲冷哼從身側(cè)響起掏秩,我...
    開(kāi)封第一講書(shū)人閱讀 37,719評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎荆姆,沒(méi)想到半個(gè)月后蒙幻,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,186評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡胆筒,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,516評(píng)論 2 327
  • 正文 我和宋清朗相戀三年邮破,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片仆救。...
    茶點(diǎn)故事閱讀 38,650評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡抒和,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出彤蔽,到底是詐尸還是另有隱情摧莽,我是刑警寧澤,帶...
    沈念sama閱讀 34,329評(píng)論 4 330
  • 正文 年R本政府宣布顿痪,位于F島的核電站镊辕,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏蚁袭。R本人自食惡果不足惜征懈,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,936評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望揩悄。 院中可真熱鬧卖哎,春花似錦、人聲如沸删性。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,757評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)蹬挺。三九已至维贺,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間汗侵,已是汗流浹背幸缕。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,991評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工群发, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留晰韵,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,370評(píng)論 2 360
  • 正文 我出身青樓熟妓,卻偏偏與公主長(zhǎng)得像雪猪,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子起愈,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,527評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容