原文

通过按钮关联跳转

选中 Button ,然后点击 action 右边拖拽到 第二个页面

选择 “Show”即可完成跳转关联。

定义页面间 segue Id,通过代码触发跳转

选中第一个页面,点击manual右边拖拽到第二个页面

选中 show即可关联两个页面

点击中间的关联点,修改 Segue Id

通过 Segue Id 跳转

@IBAction func onButtonClick(_ sender: Any) {
self.performSegue(withIdentifier: "ToSecondView", sender: nil)
}

通过 Storyboard ID 跳转

设置第二个页面的 Storyboard ID

通过 Storyboard 的文件名称和页面的 ID获取到ViewController,通过pushViewController跳转。

    @IBAction func onButtonClick(_ sender: Any) {
let sb = UIStoryboard(name: "Moments", bundle:nil)
let vc = sb.instantiateViewController(withIdentifier: "SecondView")
self.navigationController?.pushViewController(vc, animated: true)
}

传递参数

传输参数到第二个页面
class SecondViewController: UIViewController {
var param:String = ""
override func viewDidLoad() {
super.viewDidLoad()
print("param:\(param)")
}
}

传输参数非常简单,只要覆盖 prepare 方法,在方法中设置参数即可。

class FirstViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if(segue.destination is SecondViewController){
let vc = segue.destination as! SecondViewController
vc.param = "Wiki"
}
}
}

运行结果:

param:Wiki

返回参数:第一种方式
class FirstViewController: UIViewController {
var param:String = ""
override func viewDidAppear(_ animated: Bool) {
// 在这里处理返回值
print("返回值:\(param)")
}
...
}
class SecondViewController: UIViewController {
...
@IBAction func onCloseClick(_ sender: Any) {
let vc = self.navigationController?.viewControllers[(self.navigationController?.viewControllers.count)! - 2] as! FirstViewController
vc.param = "收到啦"
self.navigationController?.popViewController(animated: true)
}
}

结果

返回值:收到啦

返回参数第二种方式:通过 NotificationCenter 返回值

定义监听器

override func viewDidLoad() {
super.viewDidLoad()
let notificationName = Notification.Name("UploadStatus")
NotificationCenter.default.addObserver(self, selector: #selector(updateStatus), name: notificationName, object: nil)
}
@objc func updateStatus(notification: Notification){
if(notification.object != nil){
print("2上传状态:\(notification.object!)")
}
if(notification.userInfo != nil){
print("2参数:\(notification.userInfo!)")
}
}

发送通知

let notificationName = Notification.Name("UploadStatus")
NotificationCenter.default.post(name: notificationName, object: "上传失败")
NotificationCenter.default.post(name: notificationName, object: nil, userInfo: ["param1":"Wiki","param2":18])

基于 Storyboard 多种方式的页面跳转、参数传递的更多相关文章

  1. vue前端页面跳转参数传递及存储

    不同页面间进行参数传递,实现方式有很多种,最简单最直接的方式就是在页面跳转时通过路由传递参数,如下所示. 路由传递参数 this.$router.push({ name: '跳入页面', params ...

  2. springMVC使用注解方式进行页面跳转

    <!--控制层-->package cn.org.spartacus.spring; import org.springframework.beans.factory.annotation ...

  3. 基于jquery的从一个页面跳转到另一个页面的指定位置的实现代码

    比如 想跳到 mao.aspx 的页面 的div id="s" 的位置 那么 只用<a href="mao.aspx#s"> 就可实现跳转到指定位置 ...

  4. js方式的页面跳转

    window.location.href="login.html";   (直接function里面执行 跳转)

  5. 微信小程序页面跳转参数传递

    可以使用标签直接传递 <navigator class="gotoDetail" target="self" url="../detail/de ...

  6. Thinkphp5 表单提交额外参数和页面跳转参数传递url

    1. 表单提交 <input type="hidden" name="project_name" value="$project_name&qu ...

  7. js页面跳转的方式

    js方式的页面跳转1.window.location.href方式    <script language="javascript" type="text/java ...

  8. angularjs项目的页面跳转如何实现

    链接:https://www.zhihu.com/question/33565135/answer/696515Angular页面传参有多种办法,根据不同用例,我举5种最常见的:PS: 在实际项目中, ...

  9. AngularJS进阶(八)实现页面跳转并进行参数传递

    angularjs实现页面跳转并进行参数传递 注:请点击此处进行充电! Angular页面传参有多种办法,我在此列举4种最常见的: 1. 基于ui-router的页面跳转传参 (1) 在Angular ...

随机推荐

  1. Mongdb可视化工具Studio 3T的使用

    一.官网地址 https://studio3t.com/ 二.下载和安装 点击DOWNLOAD即可下载 按照自己电脑系统进行选择,然后填写邮箱和选择行业,第一次登录如果不提交不会下载,下载完成是一个z ...

  2. Autofac 泛型依赖注入

    using Autofac;using Autofac.Extensions.DependencyInjection;using Hangfire;using Microsoft.AspNetCore ...

  3. java基础 - 锁

    ------------------------ 参考: https://www.cnblogs.com/hustzzl/p/9343797.html https://blog.csdn.net/qq ...

  4. ConcurrentHashMap源码走读

    目录 ConcurrentHashMap源码走读 简介 放入数据 容器元素总数更新 容器扩容 协助扩容 遍历 ConcurrentHashMap源码走读 简介 在从JDK8开始,为了提高并发度,Con ...

  5. asp.net core 3.0获取web应用的根目录

    目录 1.需求 2.解决方案 1.需求 asp.net core 3.0的web项目中,在controller中,想要获取wwwroot下的imgs/banners文件夹下的所有文件: 在传统的asp ...

  6. java开发问题两三事(1)

    1. 场景描述 最近在工作中碰到的几个问题,有点坑,记录下,遇到相同或类似问题的朋友可以参考下. 2. 解决方案 2.1 Disconnected from the target VM idea控制台 ...

  7. Prometheus监控(二)

    Prometheus监控(二) 数据类型 Counter(计数器类型) Counter类型的指标的工作方式和计数器一样,只增不减(除非系统发生了重置),Counter一般用于累计值. Gauges(仪 ...

  8. go 中recover捕获异常

    recover 仅在延迟函数 defer 中有效,在正常的执行过程中,调用 recover 会返回 nil 并且没有其他任何效果.重要的事再说一遍:仅当在一个defer函数中被完成时,调用recove ...

  9. JDK性能分析工具-引用于深入理解JVM

    1.jps(JVM Process Status Tool) 列出正在运行的虚拟机进程. 2.jstat(JVM Statistics Monitoring Tool) 显示运行状态信息. 3.jin ...

  10. CentOS自动化安装LAMP脚本

    #!/bin/bash #-- #blog:lizhenliang.blog.51cto.com ########## function ########## depend_pkg () { yum ...