Swift collection

// (1) 在view中创建controlllerview 并且新建一个继承controlllerviewcell的类 两个继承nsobject类一个做model一个做请求数据的类

import UIKit

class ViewController: UIViewController ,UICollectionViewDelegate,UICollectionViewDataSource{

    var readID = "readID"

    var flowlayout = UICollectionViewFlowLayout()

    var collection: UICollectionView?

    var collecArr:[SwiftModel]?

//    var collecArr = ["3","1","2"]

    override func viewDidLoad() {

        super.viewDidLoad()

        // 设置网格的大小

        flowlayout.itemSize = CGSize(width:self.view.frame.size.width/4, height: 100)

        //设置最小行间距

        flowlayout.minimumLineSpacing = 1

        //设置最小列间距

        flowlayout.minimumInteritemSpacing = 40

        //设置分区缩进量

        flowlayout.sectionInset = UIEdgeInsets(top: 20, left: 10, bottom: 20, right: 10)

        // 设置滚动方向

        flowlayout.scrollDirection = UICollectionViewScrollDirection.vertical

        // 网格对象

        collection = UICollectionView(frame:CGRect(x: 0, y: 0, width: self.view.frame.size.width, height: self.view.frame.size.height) , collectionViewLayout: flowlayout)

        // 设置代理协议

        collection?.delegate = self

        collection?.dataSource = self

        collection?.backgroundColor = UIColor.blue

        collection?.register(NewsCollectionViewCell  .self, forCellWithReuseIdentifier: readID)

        // 添加网格

        self.view .addSubview(collection!)

    }

// 实现网格的协议代理

    func numberOfSections(in collectionView: UICollectionView) -> Int {

        return 4

    }

    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {

//        return collecArr.count

        return 6

    }

    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

        // 重用cell

        let cell:NewsCollectionViewCell = collectionView.dequeueReusableCell(withReuseIdentifier: readID, for: indexPath) as! NewsCollectionViewCell

        if self.collecArr != nil{

            let dic = self.collecArr![indexPath.item]

            cell.titlelabel?.text = dic.title

        }

        return cell

    }

    override func viewWillAppear(_ animated: Bool) {

        super.viewWillAppear(animated)

        self.requestNetWorlDataAndUpdata()

    }

    func requestNetWorlDataAndUpdata() -> Void {

        // 转动菊花

        UIApplication.shared.isNetworkActivityIndicatorVisible = true

        // 请求网络数据

        let urlService = Network()

        urlService.getNewsData(channel: "头条", startSum: 0) { (data, success) in

            // 停止指示器

            DispatchQueue.main.async {

                UIApplication.shared.isNetworkActivityIndicatorVisible = false

            }

            // 如果不成功

            if !success{

                // 异步执行

                DispatchQueue.main.async {

                    let alertVC = UIAlertController(title: nil, message: data as? String, preferredStyle: .alert)

                    let confirmBtn = UIAlertAction(title: "确定", style: .default, handler: nil)

                    alertVC.addAction(confirmBtn)

                    self.present(alertVC, animated: true, completion: {

                    })

                }

                return

            }

            self.collecArr = data as? [SwiftModel]

            print(self.collecArr)

            DispatchQueue.main.async {

                self.collection?.reloadData()

            }

        }

    }

    }

(2)  model里的代码

class SwiftModel: NSObject {

    var time:String = ""

    var title:String = ""

    var pic:String = ""

    var content:String = ""

    var weburl:String = ""

}

(3) 请求数据

import UIKit

class Network: NSObject {

    func getNewsData(channel:String,startSum:Int,complation:@escaping (Any,Bool) -> Void) -> Void {

        // get 请求网络数据

        // (1) 网址字符串拼接

        var urlStr = "http://api.jisuapi.com/news/get?channel=\(channel)&start=\(startSum)&num=10&appkey=de394933e1a3e2db"

        // (2) 转码

        urlStr = urlStr.addingPercentEncoding(withAllowedCharacters: CharacterSet.urlFragmentAllowed)!

        // (3) 分装为URL对象

        let url = URL(string: urlStr)

        // (4) 分装为urlrequest对象

        let req = URLRequest(url: url!, cachePolicy: .reloadIgnoringLocalCacheData, timeoutInterval: 10.0)

        // (5) 使用urlsession请求网络数据

        let task:URLSessionDataTask = URLSession.shared.dataTask(with: req) { (data, response, error) in

            // 如果发生错误

            if error != nil{

                // 参数闭包的调用

                complation("网络服务错误",false)

                return

            }

            // json 数据解析

            let jsonData = try? JSONSerialization.jsonObject(with: data!, options: JSONSerialization.ReadingOptions.allowFragments)

            // json 解析失败 返回错误

            if jsonData == nil{

                complation("网络数据错误",false)

                return

            }

            let status = (jsonData as! NSDictionary) .value(forKey: "status")as! String

            let msg = (jsonData as! NSDictionary).value(forKey: "msg") as! String

            if Int(status)! != 0{

                complation(msg,false)

                return

            }

            let result = (jsonData as! NSDictionary).value(forKey: "result") as! NSDictionary

            let list = (result.value(forKey: "list") as! NSArray)

            var arr:[SwiftModel] = []

            for item in list{

                let dic = (item as! NSDictionary)

                let oneNew = SwiftModel()

                oneNew.title = dic.value(forKey: "title") as! String

                oneNew.content = dic.value(forKey: "content") as! String

                oneNew.time = dic.value(forKey: "time") as! String

                oneNew.pic = dic.value(forKey: "pic") as! String

                oneNew.weburl = dic.value(forKey: "weburl") as! String

                print(oneNew.title)

                arr.append(oneNew)

            }

            complation(arr,true)

        }

        // (6)开启任务

        task .resume()

    }

}

(7) controllerviewcell中的代码

import UIKit

class NewsCollectionViewCell: UICollectionViewCell {

    // 创建两个label

    var  titlelabel:UILabel?

    var handlabel:UILabel?

    override init(frame: CGRect) {

        super .init(frame: frame)

        self.titlelabel = UILabel()

        self.addSubview(titlelabel!)

        self.handlabel = UILabel()

        self.addSubview(handlabel!)

        setTitle()

        sethand()

    }

    func setTitle(){

        self.titlelabel?.frame = CGRect(x: 0, y: 0, width: self.frame.size.width, height: 20)

        self.titlelabel?.font = UIFont .systemFont(ofSize: 14.0)

        self.titlelabel?.backgroundColor = UIColor.red

        self.titlelabel?.numberOfLines = 0

    }

    func sethand()  {

        self.handlabel?.frame = CGRect(x: 0, y: 20, width: self.frame.size.width, height: 80)

        self.handlabel?.font = UIFont .systemFont(ofSize: 12.0)

        self.handlabel?.backgroundColor = UIColor.green

        self.handlabel?.numberOfLines = 0

    }

    required init?(coder aDecoder: NSCoder) {

        fatalError("init(coder:) has not been implemented")

    }

}

作者:J_2009

链接:https://www.jianshu.com/p/c2f256495a6e

來源:简书

简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,222评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,455评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,720评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,568评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,696评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,879评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,028评论 3 409
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,773评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,220评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,550评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,697评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,360评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,002评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,782评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,010评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,433评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,587评论 2 350

推荐阅读更多精彩内容