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 就是 ...
随机推荐
- 34. leetcode 447. Number of Boomerangs
Given n points in the plane that are all pairwise distinct, a "boomerang" is a tuple of po ...
- git分支管理之创建与合并分支
在版本回退里,你已经知道,每次提交,Git都把它们串成一条时间线,这条时间线就是一个分支.截止到目前,只有一条时间线,在Git里,这个分支叫主分支,即master分支.HEAD严格来说不是指向提交,而 ...
- centos7用户,组及文件权限管理
centos7安装过程中如果没有创建用户的话,默认只有ROOT用户,这个用户是具有最高权限的帐户,可以做任何事情,但实际生产环境中我们一般不会使用这个用户,因为权限太大了,很危险. 所以在生产环境中就 ...
- Linux下ftp的安装配置
1.查看ftp包是否可用yum list | grep vsftpd 2.安装ftpyum install vsftpd 3.启动systemctl start vsftpd 4.开机启动chkcon ...
- centos7安装mysql(yum)
centos7安装mysql(yum) ----安装环境----依赖安装----检查mysql是否已安装----安装----验证是否添加成功----选择要启用的mysql版本----通过Yum安装my ...
- [BZOJ 1054][HAOI 2008]移动玩具 状态压缩
考试的时候一看是河南省选题,觉得会很难,有点不敢想正解.感觉是个状压.但是一看是十年前的题,那怂什么! 直接把十六个数的状态压进去,因为个数是不变的,所以状态枚举的时候只要找数目一样的转移即可.而且只 ...
- sqlte3 的约束
约束是在表的数据列上强制执行的规则.这些是用来限制可以插入到表中的数据类型.这确保了数据库中数据的准确性和可靠性. 约束可以是列级或表级.列级约束仅适用于列,表级约束被应用到整个表. 以下是在 SQL ...
- sqlite 的基本使用3
AND 运算符和OR运算符 这两个运算符一般被称为连接运算符,用来缩小sqlite所选的数据 AND 运算符是当所有的条件都为真时,表达式才为真 sqlite and name = "bb& ...
- Orcle导入导出dmp文件
--Orcle导入导出dmp文件 --------------------------2013/12/06 导出表: exp scott/tiger@mycon tables=(dept,emp) ...
- html table中单元格自动换行
table中单元格自动换行样式: table-layout: fixed; word-wrap: break-word; table-layout 可能的值(IE不支持inherit属性) 值 描 ...