swift

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

2017-11-01  本文已影响6人  阿凡提说AI

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
    }
}

上一篇 下一篇

猜你喜欢

热点阅读