IOS学习[Swift中跳转与传值]
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 文件就可以了.
IOS学习[Swift中跳转与传值]的更多相关文章
- ios学习:swift中实现分享到微博、facebook,twitter等
		
在swift中打开分享功能原来是如此的简单. 1.首先须要 import Social 2.在分享button事件以下 var controller:SLComposeViewController = ...
 - ios两个app之间跳转,传值的实现
		
两个APP之间的跳转是通过[[UIApplication sharedApplication] openURL:url]这种方式来实现的. 1.首先设置第一个APP的url地址 2.接着设置第二个AP ...
 - 5.10学习总结——Activity的跳转和传值
		
使用sharedpreference是对信息的存储,也可以进行传值,今天通过查找资料,学习了Activity的跳转和传值方法. 跳转 1.显示跳转 4种方法 1 2 3 4 5 6 7 8 9 10 ...
 - 【iOS】在Swift中使用JSONModel
		
前言 首先所有的Model还是使用oc来写——看到这一句是不是想关网页了- - #,在swift里面直接写一直报错所以就将就用oc来写了,这里主要是分享一下搭配Alamofire使用的经验. 声明 欢 ...
 - 【原】iOS学习之Swift之语法1(精简版)
		
1. Swift简介 2010年的夏天,苹果公司的开发人员Chris Lattne接到了一个特别的任务,为OS X 和iOS平台开发下一代的编程语言,也就是Swift. 苹果公司于2014年WWDC( ...
 - iOS: 学习笔记, Swift与Objective-C混用简明教程(转载)
		
Swift与Objective-C混用简明教程 转载自:https://github.com/lifedim/SwiftCasts/tree/master/000_mix_swift_objc 我想很 ...
 - iOS学习之UITableView中Cell的操作
		
接着iOS学习之Table View的简单使用 这篇,这里主要讲UITableView 中的Cell的操作,包括标记.移动.删除.插入. 为了简单快捷,直接从原来那篇的代码开始,代码下载地址:http ...
 - swift学习笔记 - swift中常用关键字
		
swift中常用关键字 **用作声明的关键字: ** class.deinit.enum.extension.func.import.init.let.protocol.static.struct.s ...
 - 【原】iOS学习之Swift之语法2(精简版)
		
1.可选类型和强制解包(?和!) 1> 可选类型(?)和强制解包(!) 在swift中,可选类型(?) 其根源是一个 枚举型,里面有 None 和 Some 两种类型.其实所谓的 nil 就是 ...
 
随机推荐
- Git时光机穿梭
			
我们已经成功地添加并提交了一个readme.txt文件,现在,是时候继续工作了,于是,我们继续修改readme.txt文件,改成如下内容: Git is a distributed version c ...
 - centos7源码编译安装Ansible详细部署
			
一.基础介绍==========================================================================================ansi ...
 - SpringBoot基础梳理
			
1.入口类和@SpringBootApplication注解: SpringBoot通常有一个名为*Application的入口类,入口类里面有main方法,我们可以通过启动main方法启动sprin ...
 - Luogu P1451 求细胞数量
			
题目描述 一矩形阵列由数字0到9组成,数字1到9代表细胞,细胞的定义为沿细胞数字上下左右若还是细胞数字则为同一细胞,求给定矩形阵列的细胞个数.(1<=m,n<=100)? 输入输出格式 输 ...
 - public static void main(string[] args)解释
			
这个问题困扰我好久了,今天就一查究竟,毕竟我好奇心比较重 1. why “public” 因为Java程序是通过jvm虚拟机调用的,所以main()函数要是想被调用,必须是public 2.why “ ...
 - Cox回归模型【生存分析】
			
参考:<复杂数据统计方法--基于R的应用> 吴喜之 在生存分析中,研究的主要对象是寿命超过某一时间的概率.还可以描述其他一些事情发生的概率,例如产品的失效.出狱犯人第一次犯罪.失业人员第一 ...
 - Do not request Window.FEATURE_ACTION_BAR and set windowActionBar to false in your theme to use a Toolbar instead
			
在某个activity中使用toolbar的使用,必须是在相应的application主题中也设置 <item name="windowNoTitle">true< ...
 - spring boot / cloud (十四) 微服务间远程服务调用的认证和鉴权的思考和设计,以及restFul风格的url匹配拦截方法
			
spring boot / cloud (十四) 微服务间远程服务调用的认证和鉴权的思考和设计,以及restFul风格的url匹配拦截方法 前言 本篇接着<spring boot / cloud ...
 - mySQl数据库的学习笔记
			
mySQl数据库的学习笔记... ------------------ Dos命令--先在记事本中写.然后再粘贴到Dos中去 -------------------------------- mySQ ...
 - MySQL57安装教程
			
MySQL57安装教程... --------------------------- 首先需要下载MySQL57安装包: --------------------------------------- ...