1.简单方式

首先,Swift的跳转可分为利用xib文件跳转与storyboard跳转两种方法,我这里选择使用storyboard的界面跳转方法。

1、通过在storyboard中拉button控件建立segue跳转。

2、通过presentViewController方法进行界面跳转。

这里需要注意presentViewController方法适用于xib与storyboard两种方法,但是当使用storyboard直接调用该方法时,ios模拟器会转入一个黑屏界面,程序不会报错。

主要原因是storyboard制作页面和手写页面,需要使用两种不同的方法来进行页面跳转。

对于storyboard制作页面:

1
2
3
var sb = UIStoryboard(name: "Main", bundle:nil)
var vc = sb.instantiateViewControllerWithIdentifier("myViewController") as MyViewController
self.presentViewController(vc, animated: true, completion: nil)

对于手写页面:

1
2
var vc = MyViewController()
self.presentViewController(vc, animated: true, completion: nil)

seuge跳转除了连线方式还有另外一种方法:

1
performSegueWithIdentifier("SecondSegue", sender: self)

其中利用sugue传值代码如下:

1
2
3
4
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    var des = segue.destinationViewController as! ViewController
    des.label = textF
}

2.利用协议protocol进行传值

协议protocol指的是在类之间制定一套规定进行委托执行,一个类可以通过协议委托另外一个类执行方法

protocol正向传值

写好协议:

1
2
3
4
protocol ParamsProtocol{
    //协议中得方法不能有结构体
    func returnParams(tmpStr: String)
}

ViewController:

1
2
3
4
5
6
7
8
var paramsProtocolDelegate: ParamsProtocol?
     
    //定义一个方法给协议中得方法赋值
    //在viewController中实现方法,这样在btn1,btn2中就可以不用实现,帮他们2个实现了.这就是代理.
    func start(){
        self.tmpString = "通过delegate进行的值传递方式2"
        self.paramsProtocolDelegate?.returnParams(self.tmpString)
    }

在NextViewcontroller中:

1
2
3
4
5
6
7
8
9
10
11
12
13
//遵守协议必须重新实现一下协议中得方法
func returnParams(tmpStr: String) {
    self.text2.text = tmpStr
}
override func viewDidLoad() {
    super.viewDidLoad()
    obj.paramsProtocolDelegate = self
    obj.start()
     
    // Do any additional setup after loading the view, typically from a nib.
}

  

4.利用NSUserDefaults进行传值

NSUserDefaults能实现小容量的数据存储功能,常用于用户名密码保留等功能上,也可以用来传值。

创建一个工具类:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import Foundation
//工具类,放置一些经常用到的方法
//通过userDefault存储数据
class baseClass{
     
    func cacheSetString(key: String,value: String){
        let userInfo = NSUserDefaults()
        userInfo.setValue(value, forKey: key)
    }
     
    func cacheGetString(key: String) -> String{
        let userInfo = NSUserDefaults()
        let tmpSign = userInfo.stringForKey(key)
        return tmpSign!
    }
}

ViewController:

1
2
3
4
5
6
7
var base: baseClass = baseClass()
   }
   @IBAction func btn3Click(sender: AnyObject) {
       self.base.cacheSetString("sign", value: "通过NSUserDefaults传递方式3")
       self.performSegueWithIdentifier("btn3", sender: self)       
   }

NextViewController:

1
2
3
4
5
6
7
8
9
10
11
@IBOutlet weak var text3: UITextField!
var base: baseClass = baseClass()
var sign:String = String()
override func viewDidLoad() {
     
    super.viewDidLoad()
    self.sign = base.cacheGetString("sign")
    text3.text = self.sign
     
    // Do any additional setup after loading the view, typically from a nib.
}

  


补充两种:

4. 利用 self.storyboard

利用 self.storyboard 方法, 就不需要进行 连线, 一样可以进行视图之间的跳转. 但是必须要设置 Storyboard ID.

然后利用 如下方法进行 跳转 和 传值

1
2
3
var thirdVC = self.storyboard?.instantiateViewControllerWithIdentifier("ThirdViewController") as ThirdViewController
thirdVC.text = "Pass"
self.navigationController?.pushViewController(thirdVC, animated: true)

  

因为是在 同一个 Storyboard 里面进行跳转, 所以 self.storyboard 就可以满足需求.

不明白? 看最后一个方法:

5. 利用 UIStoryboard

XIB 方法, 我们需要 用到 nibName, 同样 如果我们想要 分离多个 sence 在不同的Storyboard 里面, 怎么办?

这个时候, 就不能使用 self.storyboard 了.

而是:

1
2
3
4
var storyboard = UIStoryboard(name: "New", bundle: nil)
var newVC = storyboard.instantiateViewControllerWithIdentifier("NewViewController") as NewViewController
newVC.text = "Pass"
self.navigationController?.pushViewController(newVC, animated: true)

  

是不是 和 XIB 有异曲同工的感觉, 这样就可以把 Storyboard 分几个, 每个里面放几个 Sence.

这样的好处就是, 当你需要做多个不同功能的模块的应用, 分离到不同的 Storyboard 中, 彼此互不影响.

相对于 XIB 来说, 每个文件夹 只需要 1 个 Storyboard 文件, 和 Swfit 文件就可以了.

Swift中页面跳转与传值:相关推荐

  1. JS中页面跳转,传值包含中文时乱码解决方案

    首先,在JS中将要传递的中文编码:encodeURI(encodeURI(value)): 然后在跳转界面中取值时通过以下方式解码:java.net.URLDecoder.decode(value , ...

  2. 【Android基础】页面跳转与传值(Activity跳转与传值)

    一个Android应用程序很少会只有一个Activity对象,如何在多个Activity之间进行跳转,而且能够互相传值是一个很基本的要求. 本次我们就讲一下,Android中页面跳转以及传值的几种方式 ...

  3. 一种storyboard+swift实现页面跳转的方法

    一种storyboard+swift实现页面跳转的方法 如题.视图控制器A显示视频列表:视图控制器B显示视频详情,现希望将两个视图关联起来,点击A中某个视频跳转到B. 作为iOS小菜鸟我首先搜索了一下 ...

  4. iOS——使用StroryBoard页面跳转及传值

    之前在网上搜iOS的页面跳转大多都是按回以前的那种xib的形式,但鄙人是使用storyboard的.这篇就只介绍利用storyboard进行页面跳转与传值. 新建页面 iOS的程序也是使用了MVC的思 ...

  5. 使用Flash制作IeBook中页面跳转的按钮

    在IeBook中,如果是纯文字无特效按钮可以直接在IeBook中插入文字,并在属性栏中指定链接类型为页面跳转. 如果是swf格式的特效按钮,如果设置了链接值的话,鼠标经过滤镜特效会不起作用. 于是转换 ...

  6. 微信小程序两个页面跳转,传值

    微信小程序两个页面跳转,传值 在小程序界面,需要点击后跳转界面并且传递一个值. 具体实现如下:首先在wxml界面需要绑定事件,绑定需要传的值 a.wxml `<view bindtap=&quo ...

  7. vue中页面跳转传值_vue的页面跳转方式和传值、取值

    写业务中,从一个页面跳转到另一个页面,经常需要传值和取值,如何实现? 1.通过router-link进行跳转,传递方式: 使用query传递参数,路由必须使用path引入, 使用params传递参数, ...

  8. Android中Activity各种页面跳转并传值(Activity -> Activity)(Activity -> Fragment)(Activity -> Service)

    目录 Activity -> Activity Activity -> Fragment Fragment -> Activity Activity -> Service Ac ...

  9. vue中页面跳转传值_vue跳转方式(打开新页面)及传参操作示例

    本文实例讲述了vue跳转方式(打开新页面)及传参操作.分享给大家供大家参考,具体如下: 1. router-link跳转 // 直接写上跳转的地址 link跳转 // 添加参数 // 参数获取 id ...

最新文章

  1. PHP内核探索之变量(1)Zval
  2. 英特尔高管晒照片不小心泄密,正在研发的雷电5就这样暴露了
  3. Markdown使用文档
  4. java文件的相对路径_java中使用相对路径读取文件的写法总结 ,以及getResourceAsStream() (转)...
  5. 树莓派okdo_创客的AK47—树莓派4正式发布,性能大幅提升,售价仅为35美元。
  6. C++成员访问限定符 private public
  7. FlashCache初体验
  8. NVRH.265:鱼与熊掌不兼得?不见得!
  9. Ubuntu 终端不能输入中文,不能显示中文的解决办法
  10. 200多家厂商的OT设备受14个漏洞影响
  11. 深度学习基础(一) —— softmax 及 logsoftmax
  12. 【TSP】基于matlab遗传和模拟退火算法求解中国省会城市旅行商问题【含Matlab源码 1254期】
  13. sg nc的java下载,01_SG-NC-客户端安装说明及培训材料下载 3
  14. u盘被写保护无法格式化
  15. tcping : ping ip地址+端口号
  16. 用JS操作FRAME中的IFRAME及其内容
  17. ESP32入门教程-怎么跑起来
  18. Flink流批一体化处理框架
  19. 什么是国网综能服务集团虚拟电厂?——安科瑞 严新亚
  20. 20P70 PR模板-22种视频分屏动画预设 Split Screen Premiere

热门文章

  1. 吴恩达老师深度学习视频课笔记:超参数调试、Batch正则化和程序框架
  2. 设计模式之原型模式(Prototype)摘录
  3. oracle @spool,Oracle spool 用法小结
  4. linux apache2.4 php,php5.6+apache2.4+linux如何搭建php环境
  5. python发送邮件带附件_Python发送邮件(带附件)
  6. linux更改文件夹权限_Linux 一些重点知识,整理的很全面,有必要收藏
  7. 安卓饼状图设置软件_话单及银行卡交易智能分析软件
  8. SearchHit转成java对象_Java开发中最常犯的10个错误,你中招了吗?
  9. VMware虚拟机安装之后,打开时找不到启动Centos的界面
  10. Flutter专题1-环境搭建