Swift純代碼走進UICollectionView

2.jpg

Swift對于一門新的iOS編程語言艾帐,他的崛起是必然的

我們這群老程序員們學習新的技能也是必然的

不接受新技能將被這大群體無情的淘汰

So 我欣然接受這門看似不成熟的語言

下面我們說說Swift中比較常見的控件UICollectionView

首先我們設(shè)置一個全局的UICollectionView和一個數(shù)據(jù)源

var colltionView : UICollectionView?

var dataArr = NSMutableArray()

然后設(shè)置UICollectionView的3個代理

UICollectionViewDelegate,UICollectionViewDataSource,UICollectionViewDelegateFlowLayout

接下來我們要做的是override func viewDidLoad()方法中初始化一些必要的對象


override func viewDidLoad() {
    super.viewDidLoad()
    var layout = UICollectionViewFlowLayout()
    colltionView = UICollectionView(frame: CGRectMake(0, 0, width, height), collectionViewLayout: layout)
    //注冊一個cell
    colltionView! .registerClass(Home_Cell.self, forCellWithReuseIdentifier:"cell")
    //注冊一個headView
    colltionView! .registerClass(Home_HeadView.self, forSupplementaryViewOfKind:UICollectionElementKindSectionHeader, withReuseIdentifier: "headView")
    colltionView?.delegate = self;
    colltionView?.dataSource = self;

    colltionView?.backgroundColor = UIColor.whiteColor()
    //設(shè)置每一個cell的寬高
    layout.itemSize = CGSizeMake((width-30)/2, 250)
    self.view .addSubview(colltionView!)
    self .getData()
}

然后我們實現(xiàn)UICollectionView的代理方法

//返回多少個組
func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int {

    return 1
}
//返回多少個cell
func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    return dataArr.count
}
//返回自定義的cell
func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {

    let cell = collectionView.dequeueReusableCellWithReuseIdentifier("cell", forIndexPath: indexPath) as! Home_Cell
    var model = GoodsModel()
    model = dataArr[indexPath.row] as! GoodsModel
    let url : NSURL = NSURL(string: model.image_url as String)!
    cell.imgView!.hnk_setImageFromURL(url)
    cell.layer.borderWidth = 0.3;
    cell.layer.borderColor = UIColor.lightGrayColor().CGColor
    cell.titleLabel!.text = model.short_name
    cell.priceLabel!.text = "¥"+model.p_price
    cell.readLabel!.text = "??"+model.like_count
    return cell
}
//返回HeadView的寬高
func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, referenceSizeForHe
aderInSection section: Int) -> CGSize{

    return CGSize(width: width, height: height/1.6)
}


//返回自定義HeadView或者FootView挎塌,我這里以headview為例
func collectionView(collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, atIndexPath indexPath: NSIndexPath) -> UICollectionReusableView{
    var v = Home_HeadView()
    if kind == UICollectionElementKindSectionHeader{

    v = colltionView!.dequeueReusableSupplementaryViewOfKind(kind, withReuseIdentifier: "headView", forIndexPath: indexPath) as! Home_HeadView
    }
    return v
}
//返回cell 上下左右的間距
func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAtIndex section: Int) -> UIEdgeInsets{
    return UIEdgeInsetsMake(5, 10, 5, 10)
}

然后我們來獲取數(shù)據(jù)饰序,這里的話我用的是Alamofire進行的網(wǎng)絡請求媒区,URL不方便透露

//獲取數(shù)據(jù)
func getData(){
    Alamofire.request(.GET, GoodsUrl).responseJSON() { (req, _, JSON, _) -> Void in

        if let j = JSON as? NSDictionary{
            var data = j.valueForKey("data")as! NSArray

            for dict in data{
                var model = GoodsModel()
                model.Analytical(dict as! NSDictionary)
                self.dataArr.addObject(model)
            }

            self.colltionView!.reloadData()
        }
    }
}

接下來讓我們看下cell里面究竟寫了些什么玩意


class Home_Cell: UICollectionViewCell {

    let width = UIScreen.mainScreen().bounds.size.width//獲取屏幕寬
    var imgView : UIImageView?//cell上的圖片
    var titleLabel:UILabel?//cell上title
    var priceLabel:UILabel?//cell上價格
    var readLabel:UILabel?//cell上的閱讀量

override init(frame: CGRect) {

    super.init(frame: frame)
    //初始化各種控件
    imgView = UIImageView(frame: CGRectMake(0, -10, (width-30)/2, 200))
    self .addSubview(imgView!)
    titleLabel = UILabel(frame: CGRectMake(5, CGRectGetMaxY(imgView!.frame)-12, (width-40)/2, 50))
    titleLabel?.numberOfLines = 0
    titleLabel?.font = UIFont.boldSystemFontOfSize(14.0)
    titleLabel?.textColor = UIColor.lightGrayColor()
    self .addSubview(titleLabel!)

    priceLabel = UILabel(frame: CGRectMake(5, CGRectGetMaxY(titleLabel!.frame), (width-40)/2/2, 20))
    priceLabel?.numberOfLines = 0
    priceLabel?.font = UIFont.boldSystemFontOfSize(14.0)
    priceLabel?.textColor = UIColor.lightGrayColor()
    self .addSubview(priceLabel!)

    readLabel = UILabel(frame: CGRectMake((width-30)/2/2, CGRectGetMaxY(titleLabel!.frame), (width-40)/2/2, 20))
    readLabel?.numberOfLines = 0
    readLabel?.textAlignment = NSTextAlignment.Right
    readLabel?.font = UIFont.boldSystemFontOfSize(14.0)
    readLabel?.textColor = UIColor.lightGrayColor()
    self .addSubview(readLabel!)

}

required init(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
}

}

是不是還覺得缺少點什么奴紧?沒錯懂牧,我們的headview是不是還沒整袄ぱА?

接下來呢肢簿,我們看下UICollectionView的headview該怎么設(shè)置

重點在這里靶剑!首先headview要繼承UICollectionReusableView

然后我們這個.m文件里面并沒有看到override func viewDidLoad()這樣的方法

那我們怎么辦呢?

接下來就看我的了

我們點到我們繼承的UICollectionReusableView里面去看里面有些什么方法

功夫不負有心人池充,??終于找到了一個可以讓我們用的方法

override func applyLayoutAttributes(layoutAttributes: UICollectionViewLayoutAttributes!){

}

我們可以把要自定義的UI 請求數(shù)據(jù)什么的都放這方法里面

也就相當于我們VC里面的override func viewDidLoad()這個方法

教程到結(jié)束

有任何問題可以留言桩引,定期抽時間回復

版權(quán)歸?Bison所有 未經(jīng)允許不得轉(zhuǎn)載。

更多經(jīng)驗請點擊
原文在:http://www.allluckly.cn/


最終效果圖如下

Swift_CollTionView.gif




推薦一款學習iOS開發(fā)的app_____|______| | 傳送門

技術(shù)交流群:534926022(免費) 511040024(0.8/人付費)
版權(quán)歸?Bison所有 如需轉(zhuǎn)載請保留原文超鏈接地址收夸!否則后果自負坑匠!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市咱圆,隨后出現(xiàn)的幾起案子笛辟,更是在濱河造成了極大的恐慌功氨,老刑警劉巖序苏,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異捷凄,居然都是意外死亡忱详,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進店門跺涤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來匈睁,“玉大人,你說我怎么就攤上這事桶错『剿簦” “怎么了?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵院刁,是天一觀的道長糯钙。 經(jīng)常有香客問我,道長退腥,這世上最難降的妖魔是什么任岸? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮狡刘,結(jié)果婚禮上享潜,老公的妹妹穿的比我還像新娘。我一直安慰自己嗅蔬,他們只是感情好剑按,可當我...
    茶點故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布疾就。 她就那樣靜靜地躺著,像睡著了一般艺蝴。 火紅的嫁衣襯著肌膚如雪虐译。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天吴趴,我揣著相機與錄音漆诽,去河邊找鬼。 笑死锣枝,一個胖子當著我的面吹牛厢拭,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播撇叁,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼供鸠,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了陨闹?” 一聲冷哼從身側(cè)響起楞捂,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎趋厉,沒想到半個月后寨闹,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡君账,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年繁堡,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片乡数。...
    茶點故事閱讀 38,059評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡椭蹄,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出净赴,到底是詐尸還是另有隱情绳矩,我是刑警寧澤,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布玖翅,位于F島的核電站翼馆,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏烧栋。R本人自食惡果不足惜写妥,卻給世界環(huán)境...
    茶點故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望审姓。 院中可真熱鬧珍特,春花似錦、人聲如沸魔吐。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至嗜桌,卻和暖如春奥溺,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背骨宠。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工浮定, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人层亿。 一個月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓桦卒,卻偏偏與公主長得像,于是被迫代替她去往敵國和親匿又。 傳聞我的和親對象是個殘疾皇子方灾,可洞房花燭夜當晚...
    茶點故事閱讀 42,792評論 2 345

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