本帖最后由 莫问刀 于 2021-3-7 22:47 编辑
上面是效果图
ios网络请求-> 列表展示数据
背景
网络请求工具:Alamofire
列表展示控件:uitableview
json转模型:AlamofireObjectMapper
获取wanAndroid的api数据
https://wanandroid.com/wxarticle/chapters/json
数据不多,不用分页。
//
// WxListController.swift
// uitable
//
// Created by Alice on 2021/3/5.
//
import AlamofireObjectMapper
import UIKit
import Alamofire
//公众号列表展示页面
class WxListController: UIViewController, UITableViewDelegate, UITableViewDataSource{
//保存微信列表
var wxList = [WxAuthor]()
private lazy var uiTableView : UITableView = {
let tab = UITableView(frame: .zero)
return tab
}()
override func viewDidLoad() {
super.viewDidLoad()
view.addSubview(uiTableView)
uiTableView.snp.makeConstraints { (make) in
//大小和父容器一样大
make.width.equalToSuperview()
//设置上下位置,在安全区内
make.top.equalTo(view.safeAreaLayoutGuide.snp.top)
make.bottom.equalTo(view.safeAreaLayoutGuide.snp.bottom)
}
//设置代{过}{滤}理
uiTableView.delegate = self
uiTableView.dataSource = self
uiTableView.rowHeight = UITableView.automaticDimension
uiTableView.register(CellWxAuthor.self, forCellReuseIdentifier: "cell")
getWxList()
}
func getWxList() {
//获取列表数据
Alamofire.request(ApiConstant.getChaptersUrl()).responseObject { (response: DataResponse<BeanWxList>) in
let wxListBean = response.result.value
//print(wxListBean?.data?.toJSONString() ?? "")
self.wxList = wxListBean?.data ?? [WxAuthor]()
self.uiTableView.reloadData()
}
}
}
//tabview的cell实现
extension WxListController{
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return wxList.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! CellWxAuthor
//设置数据
cell.setValueForCell(data: wxList[indexPath.row])
return cell
}
}
-
模型代码
//
// BeanWxList.swift
// uitable
// 公众号列表模型
// Created by Alice on 2021/3/5.
//
import Foundation
import ObjectMapper
class BeanWxList: Mappable {
var errorCode : Int = 0
var errorMsg : String = ""
var data : [WxAuthor]?
required init?(map: Map) {
}
func mapping(map: Map) {
errorCode <- map["errorCode"]
errorMsg <- map["errorMsg"]
data <- map["data"]
}
}
class WxAuthor: Mappable {
required init?(map: Map) {
}
func mapping(map: Map) {
courseId <- map["courseId"]
id <- map["id"]
name <- map["name"]
order <- map["order"]
parentChapterId <- map["parentChapterId"]
}
var courseId: Int = 0
var id : Int = 0
var name : String = ""
var order : Int = 0
var parentChapterId : Int = 0
}
-
cell代码
//
// CellWxAuthor.swift
// uitable
//
// Created by Alice on 2021/3/5.
//
import UIKit
import Foundation
import SnapKit
//微信作者
class CellWxAuthor: UITableViewCell {
private lazy var labName : UILabel = {
let lab = UILabel(frame: .zero)
//显示作者名字
lab.numberOfLines = 1
lab.textColor = ColorUtils.parser("#000811")
return lab
}()
private lazy var labID : UILabel = {
let lab = UILabel(frame: .zero)
//显示作者id
lab.textColor = ColorUtils.parser("#666666")
return lab
}()
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
//ui编写
addSubview(labName)
addSubview(labID)
//开始约束,名字在上面,id在下面.
labName.snp.makeConstraints { (make) in
make.left.equalToSuperview().offset(12)
make.top.equalToSuperview().offset(12)
}
labID.snp.makeConstraints { (make) in
//左边位置到屏幕左边,margin 12
make.left.equalToSuperview().offset(12)
//顶部在name的下边,margin top 4
make.top.equalTo(labName.snp.bottom).offset(4)
//一定要约束下边.距离-12
//下和右的margin,都是负数
make.bottom.equalTo(-12)
}
}
//设置数据
func setValueForCell(data : WxAuthor) {
labName.text = data.name
labID.text = String(data.id)
}
}
纯代码构建的ui。
当前目标,就是先加载出列表数据。
点击不同的作者,进入该作者的文章列表中。展示文章的标题,封面等数据。
点击文章列表,进入文章详情中。webview展示。
以上就是简单的网络数据获取,和ui展示。
下一篇就是页面的跳转了。
代码地址
https://github.com/cat13954/IOSUiTableViewSample
|