網路狀態的檢查和MJRefresh

weixin_33797791發表於2016-09-21

網路狀態檢測


//#import "Reachability.h"橋接了這個標頭檔案
class ViewController: UIViewController {
    var window: UIWindow?
    var host:Reachability? = nil
    override func viewDidLoad() {
        super.viewDidLoad()
        self.test1()
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
    func test1() {
        
        //新增觀察者觀察網路狀態
        NSNotificationCenter.defaultCenter().addObserver(self, selector: "networkChangeStatus", name: kReachabilityChangedNotification, object: nil)
        
        //建立一個連線去不斷的嘗試做網路連線,來確定網路狀態十否發生改變
        self.host = Reachability.init(hostName: "www.baidu.com")
        self.host?.startNotifier()
        
    }
    
    func networkChangeStatus() {
        
        let status = Reachability.reachabilityForInternetConnection().currentReachabilityStatus()
        switch status {
        case NotReachable:
            print("當前沒有網路")
        case ReachableViaWiFi:
            print("當前是wifi")
        case ReachableViaWWAN:
            print("當前是3G/4G")
        default:
           break
        }
    }

MJRefresh的使用

class ViewController: UITableViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        
        //1.新增下拉重新整理控制元件
        self.test4()
    }
    
    //MARK: - 自定製上拉重新整理幀動畫
    func test4() {
        
        
        let footer = MJRefreshAutoGifFooter.init { () -> Void in
            
            
            print("開始重新整理")
            
        }
        var imageArray = [UIImage]()
        
        for i in 1...3 {
            
            let image = UIImage.init(named: "ref\(i).png")
            imageArray.append(image!)
        }
        footer.setImages(imageArray, duration: 1, forState: MJRefreshState.Refreshing)
        self.tableView.mj_footer = footer
        
//        MJRefreshAutoGifFooter *footer = [MJRefreshAutoGifFooter footerWithRefreshingTarget:self refreshingAction:@selector(loadMoreData)];
    }
    
    
    
    //MARK: - 普通的上拉載入控制元件
    func test3() {
        
        //在tableView的底部新增一個重新整理控制元件。當cell滑到最後的時候,這個控制元件會顯示出來。當手鬆開的時候會自動開始重新整理。
        self.tableView.mj_footer = MJRefreshAutoNormalFooter.init(refreshingBlock: { () -> Void in
            
            //在這一般去請求更多的資料
            print("開始載入")
            self.tableView.mj_footer.endRefreshing()
        })
    }
    
    
    //MARK: - 自定製下拉重新整理控制元件的幀動畫
    func test2() {
        
        //1.建立重新整理控制元件
        let header = MJRefreshGifHeader.init { () -> Void in
            
            //在這開始重新整理
            print("開始重新整理")
        }
        //2.給指定的狀態設定幀動畫陣列
        //引數1:圖片陣列
        var imageArray = [UIImage]()
        for item in 1...3 {
            
            let image = UIImage.init(named: "ref\(item).png")
            imageArray.append(image!)
        }
        //引數2:播放一組動畫所需要的時間
        //引數3:重新整理狀態(開始重新整理,正在重新整理,停止重新整理)
        header.setImages(imageArray, duration: 1, forState: MJRefreshState.Refreshing)
        
        //3.設定header
        self.tableView.mj_header = header
    }
    
    //MARK: - 新增普通下拉重新整理控制元件
    
    func test1() {
        
        //1.建立普通的下拉重新整理控制元件
        //會自動在tableView的頂部新增一個重新整理控制元件。當用手拖拽到頂部的時候,重新整理控制元件會自動開始重新整理
        self.tableView.mj_header = MJRefreshNormalHeader.init(refreshingBlock: { () -> Void in
            
            //在這兒去重新獲取最新的資料
            print("開始重新整理")
            
            //資料獲取完成後需要手動的停止重新整理
            self.tableView.mj_header.endRefreshing()
        })
    }

}

extension ViewController {
    
    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        
        return 50
    }
    
    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        
        
        var cell = tableView.dequeueReusableCellWithIdentifier("cell")
        
        if cell == nil {

            cell = UITableViewCell.init(style: .Subtitle, reuseIdentifier: "cell")
        }
        cell?.backgroundColor = UIColor.redColor()
        return cell!
    }
}

網路資料展示

class MainController: UITableViewController {
    
    //MARK: - 屬性
    //1.當前頁面的資料地址
    let requestUrl = "http://0.0.0.0:tuicool@api.tuicool.com/api/articles/hot.json"
    //2.資料來源陣列
    lazy var datatArray:[ArticleModel] = {
    
        return [ArticleModel]()
    }()

    //MARK: - 生命週期
    override func viewDidLoad() {
        super.viewDidLoad()
        
        //4.新增重新整理控制元件
        self.addRefView()
        //1.下載資料
        self.getData()
        //2.註冊cell
        self.tableView.registerNib(UINib.init(nibName: "ArticleCell", bundle: nil), forCellReuseIdentifier: "cell")
        //3.設定cell的高度
        self.tableView.rowHeight = 120
        
    }

}

//MARK: - 新增重新整理控制元件
extension MainController{

    func addRefView() {
        
        //1.新增下拉重新整理
        self.tableView.mj_header = MJRefreshNormalHeader.init(refreshingBlock: { 
            print("重新整理資料")
            //重新請求資料
            self.getData()
            
        })
        
        //2.新增上拉載入
        self.tableView.mj_footer = MJRefreshAutoNormalFooter.init(refreshingBlock: { 
            print("載入更多")
            //請求更多的資料
            self.getData()
        })
        
        
        
        
    }
}

//MARK: - 獲取網路資料
extension MainController{

    func getData() {
        
        //判斷是否是下拉重新整理
        if self.tableView.mj_header.isRefreshing() {
            
            self.datatArray.removeAll()
        }
        
        //1.非同步請求資料
        Alamofire.request(.GET, self.requestUrl, parameters: ["pn":self.datatArray.count/20,"size":20], encoding: .URL, headers: nil).responseJSON(options: .MutableContainers) { (data) in
            print("獲取到資料")
            
            //獲取最外層的字典
            let json = data.result.value
            
            //獲取articles對應的陣列
            if let tarry = json?.objectForKey("articles"){
                //強制轉換成陣列
                let array = tarry as! [NSDictionary]
                
                //遍歷陣列拿到字典
                for dict in array{
                
                    //根據字典建立資料模型
                    let model = ArticleModel.init(dict: dict)
                    
                    //將模型儲存到資料來源陣列中
                    self.datatArray.append(model)
                }
                
                //讓重新整理控制元件停止重新整理
                self.tableView.mj_footer.endRefreshing()
                self.tableView.mj_header.endRefreshing()
                
                //重新整理tableView
                self.tableView.reloadData()
                
            }
        }
    }
}

//MARK: - tableView 協議方法
extension MainController{

    //1.設定cell的個數
    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        
        print(self.datatArray.count)
        return self.datatArray.count
    }
    
    //2.建立cell
    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        //建立cell
        let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! ArticleCell
        //重新整理資料
        cell.model = self.datatArray[indexPath.row]
        
        //返回cell
        return cell
        
    }
    
    //3.cell被點選
    override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
        
        //跳轉到詳情頁
        let detailC = DetailViewController()
        //傳值(將被點選的cell對應的資料模型的id屬性傳到下一個介面)
        detailC.id = self.datatArray[indexPath.row].id
        
        self.navigationController?.pushViewController(detailC, animated: true)
    }
    
}


class ArticleCell: UITableViewCell {
    
    //MARK: - 屬性
    @IBOutlet weak var coverImageView: UIImageView!
    @IBOutlet weak var titleLabel: UILabel!
    @IBOutlet weak var subTitleLabel: UILabel!
    
    
    var model:ArticleModel? = nil{
        didSet{
        
            //1.通過Kingfisher去非同步載入網路圖片
            //引數1:圖片的網路地址
            if let imageurl = model?.img {
                
                self.coverImageView.kf_setImageWithURL(NSURL.init(string: imageurl)!, placeholderImage: nil)
            }
            
            titleLabel.text = model?.title
            
            subTitleLabel.text = (model?.feed_title)! + "   " + (model?.time)!
            
            
        }
    }
    
    

    override func awakeFromNib() {
        super.awakeFromNib()
        // Initialization code
    }

    override func setSelected(selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)

        // Configure the view for the selected state
    }
    
}
class ArticleModel: NSObject {
    
    var id = ""
    var feed_title = ""
    var img:String? = nil
    var time = ""
    var title = ""
    
    
    init(dict:NSDictionary) {
        self.id = dict["id"] as! String
        self.feed_title = dict["feed_title"] as! String
        self.img = dict["img"] as? String
        self.time = dict["time"] as! String
        self.title = dict["title"] as! String
    }

class DetailViewController: UIViewController {
    //MARK: - 屬性
    var id:String? = nil
    let webView = UIWebView()
    
    

    override func viewDidLoad() {
        super.viewDidLoad()
        //設定背景顏色
        self.view.backgroundColor = UIColor.whiteColor()
        
        //建立webView
        self.webView.frame = self.view.bounds
        self.view.addSubview(self.webView)
        
        self.getData()
    }
}
extension DetailViewController{

    func getData() {
        
        //1.拼接請求地址
        let urlStr = "http://0.0.0.0:tuicool@api.tuicool.com/api/articles/\(self.id!).json?ispad=1&needimage_meta=1"
        print(urlStr)
        
        //2.非同步請求
        Alamofire.request(.GET, urlStr).responseJSON(options: .MutableContainers) { (data) in
            //拿到請求結果的值
            let json = data.result.value
            
            if let tdict = json?.objectForKey("article"){
            
                //強制轉換成字典
                let dict = tdict as! NSDictionary
                
                //a.獲取到html程式碼對應的字串
                let content = dict["content"] as! String
                //b.獲取網頁地址
                let urlstr2 = dict["url"] as! String
                let url = NSURL.init(string: urlstr2)
                
                //將網頁載入到webView上
                //載入程式碼
                //self.webView.loadHTMLString(content, baseURL: url)
                self.webView.loadRequest(NSURLRequest.init(URL: url!))
                

相關文章