手把手带你学习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
}
}