iOS 设置导航,页面跳转,传值案例
学习nav导航
AppDelegate中设置导航为主窗体:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
//创建默认window
window = UIWindow.init(frame: CGRect.init(x: 0, y: 0, width: UIScreen.main.bounds.width, height: UIScreen.main.bounds.height))
window?.backgroundColor = .white
// window?.rootViewController = DemoSnapKit01()
//window?.rootViewController = ViewController()
//window?.rootViewController = WxListController()
//设置导航器
let nav = UINavigationController(rootViewController: WxListController())
//设置nav作为主窗口
window?.rootViewController = nav
//显示主窗口(默认不显示)
window?.makeKeyAndVisible()
return true
}
uitableview的点击事件处理
点击之后,取消灰色背景,取出list中的值,然后传递数据到新的view controller中
//item 的点击事件
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
//设置点击的时候,cell抬起手指之后,就没有那个选中的灰色背景颜色
//方法①https://blog.csdn.net/iotjin/article/details/80806881
tableView.deselectRow(at: indexPath, animated: false)
//返回点击的position
print("click \(indexPath.row)")
//跳转push到一个新的view
let articleVC = ArticleViewController()
//传递id和名字
articleVC.userId = String(wxList[indexPath.row].id)
articleVC.authorName = wxList[indexPath.row].name
self.navigationController?.pushViewController(articleVC, animated: true)
}
接受页面的数据,并请求文章列表
//
// ArticleViewController.swift
// uitable
//
// Created by Alice on 2021/3/6.
//
import Foundation
import UIKit
import SnapKit
import Alamofire
///作者对应文章列表
class ArticleViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
private let cellID = "article"
private var articleList = [Article]()
private lazy var uiTableView: UITableView = {
let tab = UITableView()
return tab
}()
//作者的id
var userId: String?
var authorName: String?
override func viewDidLoad() {
//设置页面的标题
self.title = authorName
print("id: \(userId ?? "def")")
view.addSubview(uiTableView)
uiTableView.snp.makeConstraints { (make) in
//宽度等于容器宽度 = 屏幕宽度
make.width.equalToSuperview()
//top bottom都是安全区的位置
make.top.equalTo(view.safeAreaLayoutGuide.snp.top)
make.bottom.equalTo(view.safeAreaLayoutGuide.snp.bottom)
}
//代{过}{滤}理方法
uiTableView.dataSource = self
uiTableView.delegate = self
//cell高度自动计算
uiTableView.rowHeight = UITableView.automaticDimension
//注册cell
uiTableView.register(CellArticleDetail.self, forCellReuseIdentifier: cellID)
//获取文章列表
getArtileById()
}
func getArtileById() {
//通过传递过来的id,获取文章列表
Alamofire.request(ApiConstant.getArticleListUrl(userID: userId ?? "", page: 1))
.responseObject{ (response: DataResponse<BeanArticle>) in
//数据获取成功之后,设置到list中.然后更新table
//let size = response.result.value?.data?.datas?.count
//print("size: \(String(describing: size))")
self.articleList = response.result.value?.data?.datas ?? [Article]()
//刷新tableview
self.uiTableView.reloadData()
}
}
}
extension ArticleViewController{
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return articleList.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: cellID, for: indexPath) as! CellArticleDetail
//设置cell的数据
cell.setValueForCell(data: articleList[indexPath.row])
return cell
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
tableView.deselectRow(at: indexPath, animated: false)
}
}
模型
//
// BeanArticle.swift
// uitable
//
// Created by Alice on 2021/3/6.
//
import Foundation
import ObjectMapper
class BeanArticle: Mappable {
required init?(map: Map) {
}
func mapping(map: Map) {
data <- map["data"]
errorCode <- map["errorCode"]
errorMsg <- map["errorMsg"]
}
var data: ArticleInfo?
var errorCode: Int = 0
var errorMsg: String = ""
}
class ArticleInfo: Mappable {
required init?(map: Map) {
}
func mapping(map: Map) {
curPage <- map["curPage"]
offset <- map["offset"]
over <- map["over"]
pageCount <- map["pageCount"]
size <- map["size"]
total <- map["total"]
datas <- map["datas"]
}
var curPage: Int = 0
var offset: Int = 0
var over: Bool = false
var pageCount: Int = 0
var size: Int = 0
var total: Int = 0
var datas: [Article]?
}
class Article: Mappable {
required init?(map: Map) {
}
func mapping(map: Map) {
author <- map["author"]
chapterName <- map["chapterName"]
link <- map["link"]
niceDate <- map["niceDate"]
niceShareDate <- map["niceShareDate"]
shareDate <- map["shareDate"]
title <- map["title"]
}
var author: String = ""
var chapterName: String = ""
var link: String = ""
var niceDate: String = ""
var niceShareDate: String = ""
var shareDate: Double = 0
var title: String = ""
}
cell的布局编写
//
// CellArticleDetail.swift
// uitable
//
// Created by Alice on 2021/3/6.
//
import Foundation
import UIKit
import SnapKit
class CellArticleDetail: UITableViewCell {
//作者名字
private lazy var labAuthor: UILabel = {
let lab = UILabel()
lab.textColor = ColorUtils.parser("#959697")
lab.font = lab.font.withSize(12)
return lab
}()
//标题
private lazy var labArticleTitle: UILabel = {
let lab = UILabel()
//显示多行
lab.font = lab.font.withSize(16)
lab.numberOfLines = 0
lab.textColor = ColorUtils.parser("#111213")
return lab
}()
//更新的时间显示
private lazy var labNiceShareDate: UILabel = {
let lab = UILabel()
lab.textColor = ColorUtils.parser("#959697")
lab.font = lab.font.withSize(12)
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)
//添加view到cell中,并约束位置
addSubview(labAuthor)
addSubview(labArticleTitle)
addSubview(labNiceShareDate)
//约束标题
labArticleTitle.snp.makeConstraints { (make) in
make.top.equalToSuperview().offset(10)
make.left.equalToSuperview().offset(12)
make.right.equalToSuperview()
}
//约束作者名字
labAuthor.snp.makeConstraints { (make) in
make.left.equalToSuperview().offset(10)
make.top.equalTo(labArticleTitle.snp.bottom).offset(13)
}
//约束更新时间
labNiceShareDate.snp.makeConstraints { (make) in
make.left.equalTo(labAuthor.snp.right).offset(10)
make.top.equalTo(labAuthor.snp.top)
make.bottom.equalTo(-10)
}
}
func setValueForCell(data: Article){
//设置数据
labArticleTitle.text = data.title
labAuthor.text = data.author
labNiceShareDate.text = data.niceShareDate
}
}
整个页面的套路比较普通,就是获取作者,然后点击对应作者,进入文章列表中。
点击文章,会进入详情中。这是接下里的计划了。
由于最近搬家,可能会晚点更新。
-
目前开始学习ios原生开发,基于xcode 12和swift 5.2
-
自己每天晚上回来学习1-2个小时,具体看情况
-
由于有时候比较忙,会更新得比较慢点
-
我是小白,很多东西都是靠百度,Google,和问群里面的大佬
现在开发大概明白了一些套路了。
>
> 网络请求数据
>
> 编写数据的模型
>
> 请求到数据之后,设置到某个位置
>
> snapkit,是一个布局框架,是大佬们推荐的,目前还在学习中
>
> 很多页面效果,都需要自己尝试,网上找的的资料太少了,例子也不多。还是自己摸索为主。
>
> 如果你发现有更好的ios教程,可以评论区留言给我,大家一起学习进步。
代码地址
https://github.com/cat13954/IOSUiTableViewSample