网络状态的检查和MJRefresh

网络状态检测


//#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:[email protected]/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:[email protected]/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!))
                

你可能感兴趣的:(网络状态的检查和MJRefresh)