swift controlllerview

// (1) 在view中創(chuàng)建controlllerview 并且新建一個繼承controlllerviewcell的類 兩個繼承nsobject類一個做model一個做請求數(shù)據(jù)的類

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()

? ? ? ? // 設(shè)置網(wǎng)格的大小

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

? ? ? ? //設(shè)置最小行間距

? ? ? ? flowlayout.minimumLineSpacing = 1


? ? ? ? //設(shè)置最小列間距

? ? ? ? flowlayout.minimumInteritemSpacing = 40


? ? ? ? //設(shè)置分區(qū)縮進量

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



? ? ? ? // 設(shè)置滾動方向

? ? ? ? flowlayout.scrollDirection = UICollectionViewScrollDirection.vertical


? ? ? ? // 網(wǎng)格對象

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

? ? ? ? // 設(shè)置代理協(xié)議

? ? ? ? collection?.delegate = self

? ? ? ? collection?.dataSource = self

? ? ? ? collection?.backgroundColor = UIColor.blue

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


? ? ? ? // 添加網(wǎng)格

? ? ? ? self.view .addSubview(collection!)


? ? }

// 實現(xiàn)網(wǎng)格的協(xié)議代理

? ? 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 {

? ? ? ? // 轉(zhuǎn)動菊花

? ? ? ? UIApplication.shared.isNetworkActivityIndicatorVisible = true


? ? ? ? // 請求網(wǎng)絡(luò)數(shù)據(jù)

? ? ? ? let urlService = Network()

? ? ? ? urlService.getNewsData(channel: "頭條", startSum: 0) { (data, success) in

? ? ? ? ? ? // 停止指示器

? ? ? ? ? ? DispatchQueue.main.async {

? ? ? ? ? ? ? ? UIApplication.shared.isNetworkActivityIndicatorVisible = false


? ? ? ? ? ? }


? ? ? ? ? ? // 如果不成功

? ? ? ? ? ? if !success{

? ? ? ? ? ? ? ? // 異步執(zhí)行

? ? ? ? ? ? ? ? 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) 請求數(shù)據(jù)


import UIKit


class Network: NSObject {

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

? ? ? ? // get 請求網(wǎng)絡(luò)數(shù)據(jù)

? ? ? ? // (1) 網(wǎng)址字符串拼接

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

? ? ? ? // (2) 轉(zhuǎn)碼

? ? ? ? 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請求網(wǎng)絡(luò)數(shù)據(jù)

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

? ? ? ? ? ? // 如果發(fā)生錯誤

? ? ? ? ? ? if error != nil{

? ? ? ? ? ? ? ? // 參數(shù)閉包的調(diào)用

? ? ? ? ? ? ? ? complation("網(wǎng)絡(luò)服務(wù)錯誤",false)

? ? ? ? ? ? ? ? return

? ? ? ? ? ? }

? ? ? ? ? ? // json 數(shù)據(jù)解析

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

? ? ? ? ? ? // json 解析失敗 返回錯誤

? ? ? ? ? ? if jsonData == nil{

? ? ? ? ? ? ? ? complation("網(wǎng)絡(luò)數(shù)據(jù)錯誤",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)開啟任務(wù)

? ? ? ? task .resume()



? ? }

}

(7) controllerviewcell中的代碼

import UIKit


class NewsCollectionViewCell: UICollectionViewCell {

? ? // 創(chuàng)建兩個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")

? ? }


}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末岩喷,一起剝皮案震驚了整個濱河市匹表,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌搅裙,老刑警劉巖脑漫,帶你破解...
    沈念sama閱讀 211,561評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡缩擂,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,218評論 3 385
  • 文/潘曉璐 我一進店門添寺,熙熙樓的掌柜王于貴愁眉苦臉地迎上來胯盯,“玉大人,你說我怎么就攤上這事计露〔┠裕” “怎么了?”我有些...
    開封第一講書人閱讀 157,162評論 0 348
  • 文/不壞的土叔 我叫張陵票罐,是天一觀的道長叉趣。 經(jīng)常有香客問我,道長该押,這世上最難降的妖魔是什么疗杉? 我笑而不...
    開封第一講書人閱讀 56,470評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮蚕礼,結(jié)果婚禮上烟具,老公的妹妹穿的比我還像新娘。我一直安慰自己奠蹬,他們只是感情好朝聋,可當(dāng)我...
    茶點故事閱讀 65,550評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著囤躁,像睡著了一般冀痕。 火紅的嫁衣襯著肌膚如雪荔睹。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,806評論 1 290
  • 那天金度,我揣著相機與錄音应媚,去河邊找鬼。 笑死猜极,一個胖子當(dāng)著我的面吹牛中姜,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播跟伏,決...
    沈念sama閱讀 38,951評論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼丢胚,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了受扳?” 一聲冷哼從身側(cè)響起携龟,我...
    開封第一講書人閱讀 37,712評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎勘高,沒想到半個月后峡蟋,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,166評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡华望,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,510評論 2 327
  • 正文 我和宋清朗相戀三年蕊蝗,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片赖舟。...
    茶點故事閱讀 38,643評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡蓬戚,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出宾抓,到底是詐尸還是另有隱情子漩,我是刑警寧澤,帶...
    沈念sama閱讀 34,306評論 4 330
  • 正文 年R本政府宣布石洗,位于F島的核電站幢泼,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏讲衫。R本人自食惡果不足惜缕棵,卻給世界環(huán)境...
    茶點故事閱讀 39,930評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望焦人。 院中可真熱鬧,春花似錦重父、人聲如沸花椭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,745評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽矿辽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間袋倔,已是汗流浹背雕蔽。 一陣腳步聲響...
    開封第一講書人閱讀 31,983評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留宾娜,地道東北人批狐。 一個月前我還...
    沈念sama閱讀 46,351評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像前塔,于是被迫代替她去往敵國和親嚣艇。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,509評論 2 348

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