吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3542|回复: 16
收起左侧

[学习记录] [ios]iOS 设置导航,页面跳转传值学习(连载3)

[复制链接]
debug_cat 发表于 2021-3-6 20:16
本帖最后由 莫问刀 于 2021-3-7 22:46 编辑

国际惯例,先上效果图
Xnip2021-03-06_19-53-53.png Xnip2021-03-06_19-54-31.png





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

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
mo211683 + 1 + 1 跟着大佬学习

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

xxjj999 发表于 2021-3-6 20:28
谢谢楼主分享
 发表于 2021-3-6 20:34
747900 发表于 2021-3-6 20:35
飞天小俊 发表于 2021-3-6 20:54
我先知道,这个有什么用啊。
 楼主| debug_cat 发表于 2021-3-6 21:21
飞天小俊 发表于 2021-3-6 20:54
我先知道,这个有什么用啊。

开发ios的app啊。这个是我学习笔记来的。
 楼主| debug_cat 发表于 2021-3-6 21:22
747900 发表于 2021-3-6 20:35
这个带壳截图是啥 老哥

这个是电脑上面的模拟器来的,不是真机。真机也可以带壳截图,不过需要软件来做。
 楼主| debug_cat 发表于 2021-3-6 21:25
747900 发表于 2021-3-6 20:35
这个带壳截图是啥 老哥

这个是电脑上面的模拟器来的,不是真机。真机也可以带壳截图,不过需要软件来做。
159753qwe 发表于 2021-3-6 21:30
买得起i12,笔者真是有钱
 楼主| debug_cat 发表于 2021-3-6 21:32
159753qwe 发表于 2021-3-6 21:30
买得起i12,笔者真是有钱

你好,这个是模拟器来的,不是真机。
可以连接手机开发的。i12大佬你也可以买啊
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-26 06:48

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表