Swift 中不同窗体的切换和传递数据 (segue 的用法)

本贴最后更新于 2291 天前,其中的信息可能已经水流花落

废话不多说,直接进入正题

首先在 storyboard 中新建一个 ViewController,再新建一个名为 NewViewController 的 cocoa touch class 文件,继承 UIViewController,将新建的 ViewController 绑定到 NewViewController 类上。现在 storyboard 中就有两个 ViewController 了。如图:
屏幕快照 20190726 下午 11.40.33.png

屏幕快照 20190726 下午 11.41.04.png

之后设计窗体上的控件,在第一个窗体(称为窗体 A)内放一个标签和一个按钮,在第二个窗体(称为窗体 B)内放一个输入框和按钮。将标签和输入框的 outlet 绑定到 swift 文件中,为两个按钮分别添加各自的监听事件。如图:

屏幕快照 20190726 下午 11.55.10.png

屏幕快照 20190726 下午 11.56.29.png

屏幕快照 20190726 下午 11.56.43.png

我们的目标是点击窗体 A 的按钮能够跳转到窗体 B,同时窗体 B 输入框中的内容变成窗体 A 标签内的文字,在修改输入框中的内容,再点击按钮,能够跳转回窗体 A,同时窗体 A 标签中的内容变成在窗体 B 的输入框中修改的内容。

我们选中第一个窗体上方三个按钮中的第一个按钮,用拖拽的方式拖到第二个窗体,并在弹出来的选项中选择 show detail。如图
屏幕快照 20190727 上午 12.01.07.png

屏幕快照 20190727 上午 12.01.12.png

之后就可以看到两个窗体之间新增了一条连接线
屏幕快照 20190727 上午 12.01.29.png

选中这条连接线,设置它的 Storyboard Segue 的 Identifier 为 JumpToNew。
屏幕快照 20190727 上午 12.04.35.png

在 NewViewController 中应当加一个变量 data 用于存储传来的数据,同时在窗体加载时将 data 的数据放入 textField 中,代码如下:

var data:String? override func viewDidLoad() { super.viewDidLoad() textField1.text = data }

然后我们在 ViewController 中按钮的监听事件中编写跳转代码,并且再外加一个方法传递数据

// ViewController.swift @IBAction func jump(_ sender: UIButton) { self.performSegue(withIdentifier: "JumpToNew", sender: label1.text) } override func prepare(for segue: UIStoryboardSegue, sender: Any?) { if segue.identifier == "JumpToNew"{ let controller = segue.destination as! NewViewController controller.data = sender as? String } }

之后运行程序就会发现第二个窗体的 textField 中也显示了 Hello

接下来实现在窗体 B 中修改的内容在窗体 A 中显示,首先在窗体 A 的 swift 文件中新建一个 IBAction 修饰的方法:

@IBAction func back(unwindSegue : UIStoryboardSegue){ let view = unwindSegue.source as! NewViewController label1.text = view.textField1.text }

这个方法里的 view 就是指窗体 B,这个方法在从窗体 B 返回窗体 A 时执行

之后将窗体 B 的 Exit 方法绑定到按钮上,选中返回按钮,拖拽到窗体 B 上方第三个按钮(Exit),再选择 backWithUnwindSegue。这个意思就是在点击返回按钮时回到窗体 A,同时窗体 A 中的 back 方法。如图
屏幕快照 20190727 上午 12.44.45.png

屏幕快照 20190727 上午 12.44.53.png

OK,大功告成

  • Swift

    Swift 是苹果于 2014 年 WWDC(苹果开发者大会)发布的开发语言,可与 Objective-C 共同运行于 Mac OS 和 iOS 平台,用于搭建基于苹果平台的应用程序。

    34 引用 • 37 回帖 • 559 关注
  • iOS

    iOS 是由苹果公司开发的移动操作系统,最早于 2007 年 1 月 9 日的 Macworld 大会上公布这个系统,最初是设计给 iPhone 使用的,后来陆续套用到 iPod touch、iPad 以及 Apple TV 等产品上。iOS 与苹果的 Mac OS X 操作系统一样,属于类 Unix 的商业操作系统。

    89 引用 • 150 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • Facebook

    Facebook 是一个联系朋友的社交工具。大家可以通过它和朋友、同事、同学以及周围的人保持互动交流,分享无限上传的图片,发布链接和视频,更可以增进对朋友的了解。

    4 引用 • 15 回帖 • 440 关注
  • CentOS

    CentOS(Community Enterprise Operating System)是 Linux 发行版之一,它是来自于 Red Hat Enterprise Linux 依照开放源代码规定释出的源代码所编译而成。由于出自同样的源代码,因此有些要求高度稳定的服务器以 CentOS 替代商业版的 Red Hat Enterprise Linux 使用。两者的不同在于 CentOS 并不包含封闭源代码软件。

    240 引用 • 224 回帖
  • RYMCU

    RYMCU 致力于打造一个即严谨又活泼、专业又不失有趣,为数百万人服务的开源嵌入式知识学习交流平台。

    4 引用 • 6 回帖 • 60 关注
  • Git

    Git 是 Linux Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。

    212 引用 • 358 回帖
  • 千千插件

    千千块(自定义块 css 和 js)
    可以用 ai 提示词来无限创作思源笔记

    31 引用 • 50 回帖 • 1 关注
  • C++

    C++ 是在 C 语言的基础上开发的一种通用编程语言,应用广泛。C++ 支持多种编程范式,面向对象编程、泛型编程和过程化编程。

    108 引用 • 153 回帖 • 1 关注
  • 又拍云

    又拍云是国内领先的 CDN 服务提供商,国家工信部认证通过的“可信云”,乌云众测平台认证的“安全云”,为移动时代的创业者提供新一代的 CDN 加速服务。

    20 引用 • 37 回帖 • 561 关注
  • 书籍

    宋真宗赵恒曾经说过:“书中自有黄金屋,书中自有颜如玉。”

    85 引用 • 414 回帖
  • AWS
    11 引用 • 28 回帖 • 3 关注
  • TensorFlow

    TensorFlow 是一个采用数据流图(data flow graphs),用于数值计算的开源软件库。节点(Nodes)在图中表示数学操作,图中的线(edges)则表示在节点间相互联系的多维数据数组,即张量(tensor)。

    20 引用 • 19 回帖
  • abitmean

    有点意思就行了

    40 关注
  • Pipe

    Pipe 是一款小而美的开源博客平台。Pipe 有着非常活跃的社区,可将文章作为帖子推送到社区,来自社区的回帖将作为博客评论进行联动(具体细节请浏览 B3log 构思 - 分布式社区网络)。

    这是一种全新的网络社区体验,让热爱记录和分享的你不再感到孤单!

    134 引用 • 1128 回帖 • 108 关注
  • App

    App(应用程序,Application 的缩写)一般指手机软件。

    91 引用 • 384 回帖
  • Spark

    Spark 是 UC Berkeley AMP lab 所开源的类 Hadoop MapReduce 的通用并行框架。Spark 拥有 Hadoop MapReduce 所具有的优点;但不同于 MapReduce 的是 Job 中间输出结果可以保存在内存中,从而不再需要读写 HDFS,因此 Spark 能更好地适用于数据挖掘与机器学习等需要迭代的 MapReduce 的算法。

    74 引用 • 46 回帖 • 561 关注
  • V2EX

    V2EX 是创意工作者们的社区。这里目前汇聚了超过 400,000 名主要来自互联网行业、游戏行业和媒体行业的创意工作者。V2EX 希望能够成为创意工作者们的生活和事业的一部分。

    16 引用 • 236 回帖 • 234 关注
  • 人工智能

    人工智能(Artificial Intelligence)是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门技术科学。

    134 引用 • 394 回帖 • 1 关注
  • Windows

    Microsoft Windows 是美国微软公司研发的一套操作系统,它问世于 1985 年,起初仅仅是 Microsoft-DOS 模拟环境,后续的系统版本由于微软不断的更新升级,不但易用,也慢慢的成为家家户户人们最喜爱的操作系统。

    232 引用 • 484 回帖
  • Logseq

    Logseq 是一个隐私优先、开源的知识库工具。

    Logseq is a joyful, open-source outliner that works on top of local plain-text Markdown and Org-mode files. Use it to write, organize and share your thoughts, keep your to-do list, and build your own digital garden.

    7 引用 • 69 回帖 • 9 关注
  • Ubuntu

    Ubuntu(友帮拓、优般图、乌班图)是一个以桌面应用为主的 Linux 操作系统,其名称来自非洲南部祖鲁语或豪萨语的“ubuntu”一词,意思是“人性”、“我的存在是因为大家的存在”,是非洲传统的一种价值观,类似华人社会的“仁爱”思想。Ubuntu 的目标在于为一般用户提供一个最新的、同时又相当稳定的主要由自由软件构建而成的操作系统。

    127 引用 • 169 回帖 • 1 关注
  • CodeMirror
    2 引用 • 17 回帖 • 189 关注
  • 印象笔记
    3 引用 • 21 回帖 • 1 关注
  • jQuery

    jQuery 是一套跨浏览器的 JavaScript 库,强化 HTML 与 JavaScript 之间的操作。由 John Resig 在 2006 年 1 月的 BarCamp NYC 上释出第一个版本。全球约有 28% 的网站使用 jQuery,是非常受欢迎的 JavaScript 库。

    63 引用 • 134 回帖 • 738 关注
  • CongSec

    本标签主要用于分享网络空间安全专业的学习笔记

    1 引用 • 1 回帖 • 51 关注
  • SendCloud

    SendCloud 由搜狐武汉研发中心孵化的项目,是致力于为开发者提供高质量的触发邮件服务的云端邮件发送平台,为开发者提供便利的 API 接口来调用服务,让邮件准确迅速到达用户收件箱并获得强大的追踪数据。

    2 引用 • 8 回帖 • 527 关注
  • 强迫症

    强迫症(OCD)属于焦虑障碍的一种类型,是一组以强迫思维和强迫行为为主要临床表现的神经精神疾病,其特点为有意识的强迫和反强迫并存,一些毫无意义、甚至违背自己意愿的想法或冲动反反复复侵入患者的日常生活。

    15 引用 • 161 回帖
  • Thymeleaf

    Thymeleaf 是一款用于渲染 XML/XHTML/HTML5 内容的模板引擎。类似 Velocity、 FreeMarker 等,它也可以轻易的与 Spring 等 Web 框架进行集成作为 Web 应用的模板引擎。与其它模板引擎相比,Thymeleaf 最大的特点是能够直接在浏览器中打开并正确显示模板页面,而不需要启动整个 Web 应用。

    11 引用 • 19 回帖 • 403 关注
  • Word
    13 引用 • 41 回帖