? ? 最近在將公司項(xiàng)目進(jìn)行重構(gòu),主要是領(lǐng)導(dǎo)說(shuō)把H5界面寫的全都改成原生來(lái)寫。于是這工作量和工作難度成倍增長(zhǎng)。所以,在看到UI的時(shí)候,首先是想好自己要怎么寫能夠最簡(jiǎn)單且高效,還能夠沒有冗余代碼。在項(xiàng)目中,純手寫代碼,不用storyboard也不用Xib文件,在我看來(lái)手寫代碼比拖動(dòng)那些視圖布局要比Xib那些穩(wěn)妥很多,盡管代碼量相比起來(lái)前者更多。

? ? 好了,回歸正題。上圖就是我項(xiàng)目里一個(gè)界面的一部分,這個(gè)部分要實(shí)現(xiàn)的功能是,點(diǎn)擊按鈕,按鈕就會(huì)改變不同的圖片,前一張點(diǎn)擊的(非重復(fù))圖片保持不變,這部分我是這樣布局的。


? ? 我手寫布局習(xí)慣了用sd_layout這個(gè)第三方庫(kù),盡管用起來(lái)偶爾有小坑,但是還是不影響其整體使用。上面兩個(gè)數(shù)組都是保存的圖片名,defaultArray按順序(周日--周一)保存的是未選中時(shí)的圖片,changeArray則是按順序(周日--周一)保存的是選中時(shí)的圖片。
? ? 有些人覺得可能直接寫7個(gè)button更加快速,但是collectionView有那么多優(yōu)秀的屬性,何樂而不用呢?大家在看到UIcollectionViewCell的那個(gè)方法時(shí),就會(huì)發(fā)現(xiàn)我已經(jīng)將cell的backgroundView逐一設(shè)置成了未選中的圖片,其selectedBackgroundView設(shè)置成了選中的圖片,當(dāng)然,在不做任何操作的情況下,cell的背景圖片的是backgroundView。這樣一來(lái)我們就省去了在使用button點(diǎn)擊時(shí)的不少判斷了。
? ? 我這個(gè)界面剛開始是根據(jù)服務(wù)器獲取的數(shù)據(jù)來(lái)判斷是否是選中狀態(tài)的,那么拿來(lái)做判斷的數(shù)據(jù)也就是創(chuàng)建collectionView時(shí)那段代碼里的weekArray啦。weekArray是保存的0-6的數(shù)字,具體是哪些就要看用戶設(shè)置的周幾了,0代表設(shè)置的是周日,依次類推到周六。

? ? 用到這個(gè)selectItemAtIndexPath:index animated:YES scrollPosition:UICollectionViewScrollPositionTop方法,index表示將cell里哪個(gè)row選中,scrollposition是一個(gè)enum類型,具體有哪些大家可以點(diǎn)進(jìn)去它的官方文檔查看,這里不再做贅述。
注意:在創(chuàng)建UICollectionView時(shí),它的allowsMultipleSelection屬性一定設(shè)置成YES。
? ? 方便之處還有就是大家不需要記錄哪些是已經(jīng)被選中的,大家只需要調(diào)用collectionView自帶的方法就可以獲取到被選中的是哪些cell,如下圖:

? ? 在此,我這小部分的UI和功能就全部實(shí)現(xiàn)了。是不是寫起來(lái)比循環(huán)創(chuàng)建7個(gè)button有效簡(jiǎn)單的多呢?
? ?菜鳥第一次寫技術(shù)文檔,若有不當(dāng)之處,望多指正。