美文网首页swift
手把手带你学习Swift3.0(31):新闻demo

手把手带你学习Swift3.0(31):新闻demo

作者: 阿凡提说AI | 来源:发表于2017-11-01 21:06 被阅读6次

    1.NewsModel.swift

    import UIKit
    
    class NewsModel: NSObject {
        // MARK: 定义属性
        var replyCount : Int = 0
        var title : String = ""
        var source : String = ""
        var imgsrc : String = ""
        
        
        // MARK: 定义字典转模型的构造函数
        init(dict : [String : Any]) {
            super.init()
            
            setValuesForKeys(dict)
        }
        
        override func setValue(_ value: Any?, forUndefinedKey key: String) {}
    }
    
    

    2.NewsViewCell.swift

    import UIKit
    
    class NewsViewCell: UITableViewCell {
    
        // MARK: 控件属性
        @IBOutlet weak var iconImageView: UIImageView!
        @IBOutlet weak var titleLabel: UILabel!
        @IBOutlet weak var sourceLabel: UILabel!
        @IBOutlet weak var replyCountLabel: UILabel!
        
        
        // MARK: 定义模型属性
        var newsModel : NewsModel? {
            didSet {
                // 1.设置基本信息
                titleLabel.text = newsModel?.title
                sourceLabel.text = newsModel?.source
                replyCountLabel.text = "\(newsModel?.replyCount ?? 0)跟帖" // Optional("1234")跟帖
                
                // 2.设置图片
                let iconURL = URL(string: newsModel?.imgsrc ?? "")
                iconImageView.kf.setImage(with: iconURL)
            }
        }
    }
    
    

    3.HomeViewController.swift

    import UIKit
    
    // MARK:- 定义全局常量
    private let kHomeCellID = "kHomeCellID"
    
    // MARK:- 类的声明
    class HomeViewController: UIViewController {
        
        // MARK: 懒加载属性
        fileprivate lazy var newsModels : [NewsModel] = [NewsModel]()
        fileprivate lazy var tableView : UITableView = {[unowned self] in
            // 1.创建UITableView
            let tableView = UITableView()
            
            // 2.设置tableView相关的属性
            tableView.frame = self.view.bounds
            tableView.dataSource = self
            tableView.rowHeight = 90
            
            // 3.注册Cell
            tableView.register(UINib(nibName: "NewsViewCell", bundle: nil), forCellReuseIdentifier: kHomeCellID)
            
            return tableView
        }()
        
        // MARK: 系统回调函数
        override func viewDidLoad() {
            super.viewDidLoad()
            
            // 1.设置导航栏
            setupNavigationBar()
            
            // 2.添加UITableView
            view.addSubview(tableView)
            
            // 3.请求数据
            loadData()
        }
    }
    
    
    // MARK:- 设置UI界面
    extension HomeViewController {
        fileprivate func setupNavigationBar() {
            // 1.设置背景图片
            navigationController?.navigationBar.setBackgroundImage(UIImage(named: "reader_navigation_background"), for: .default)
            
            // 2.设置标题
            navigationItem.titleView = UIImageView(image: UIImage(named: "navigation_logo"))
            
            // 3.设置右侧的搜索按钮
            navigationItem.rightBarButtonItem = UIBarButtonItem(image: UIImage(named : "navigation_search"), style: .plain, target: self, action: #selector(searchItemClick))
        }
    }
    
    
    // MARK:- 事件监听函数
    extension HomeViewController {
        // @objc --> 为了保留OC的特性
        @objc fileprivate func searchItemClick() {
            print("-------")
        }
    }
    
    
    // MARK:- 网络数据的请求
    extension HomeViewController {
        fileprivate func loadData() {
            NetworkTools.requestData(URLString: "http://c.m.163.com/nc/article/list/T1348649079062/0-20.html", type: .get) { (result : Any) in
                // 1.将Any类型转成字典类型
                guard let resultDict = result as? [String : Any] else { return }
                
                // 2.根据T1348649079062的Key取出内容
                guard let dataArray = resultDict["T1348649079062"] as? [[String : Any]] else { return }
                
                // 3.遍历字典,将字典转成模型对象
                for dict in dataArray {
                    self.newsModels.append(NewsModel(dict: dict))
                }
                
                // 4.刷新表格
                self.tableView.reloadData()
            }
        }
    }
    
    
    // MARK:- 实现UITableView的数据源
    extension HomeViewController : UITableViewDataSource {
        func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
            return newsModels.count
        }
        
        func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
            // 1.获取Cell
            let cell = tableView.dequeueReusableCell(withIdentifier: kHomeCellID, for: indexPath) as! NewsViewCell
            
            // 2.给Cell设置数据
            cell.newsModel = newsModels[indexPath.row]
            
            return cell
        }
    }
    
    
    

    4.设置状态栏为白色
    Info.plist中View controller-based status bar appearance 设置为NO

    import UIKit
    
    @UIApplicationMain
    class AppDelegate: UIResponder, UIApplicationDelegate {
    
        var window: UIWindow?
    
    
        func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
            
            application.statusBarStyle = .lightContent
            
            return true
        }
    }
    
    

    相关文章

      网友评论

        本文标题:手把手带你学习Swift3.0(31):新闻demo

        本文链接:https://www.haomeiwen.com/subject/fhqnpxtx.html