首页 技术 正文
技术 2022年11月20日
0 收藏 311 点赞 3,470 浏览 3153 个字

Swift中页面跳转与传值:

1.简单方式

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

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

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

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

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

对于storyboard制作页面:

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

对于手写页面:

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

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

performSegueWithIdentifier("SecondSegue", sender: self)

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

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

2.利用协议protocol进行传值

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

protocol正向传值

写好协议:

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

ViewController:

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

在NextViewcontroller中:

    //遵守协议必须重新实现一下协议中得方法
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能实现小容量的数据存储功能,常用于用户名密码保留等功能上,也可以用来传值。

创建一个工具类:

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:

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

NextViewController:

    @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.

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

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 了.

而是:

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 文件就可以了.

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:8,966
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,487
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,332
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,115
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,748
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,783