关闭

Swift中页面跳转与传值:

标签: swift传值
2430人阅读 评论(0) 收藏 举报

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

0
0
查看评论

iOS开发之一篇文章学会页面传值详解 - 十种页面传值方法大全 swift 版本

1、最简单AB面正向传值 效果如下: 最简单的正向传值.gif 首先我们先创建两个视图控制器ViewController.swift和SubViewController.swift 设置第一个界面 首先在第一个界面创建好一个TextFeild,用来写我们要传的文字 i...
  • zhonggaorong
  • zhonggaorong
  • 2016-10-28 10:11
  • 3274

Swift:界面传值指南

前言好久没有更新博客了,过了一个年,长胖了不少。昨天把Swift语言的传值方法整理了一下,今天呢,就把整理的东西形成文章以供大家参考,不到之处,欢迎各位提点。在去年,我整理了一篇OC版本的界面传值文章,如果你想要了解OC实现形式,欢迎前往阅读。通知传值通知可实现任意界面之间的数据传递,但必须满足一个...
  • Hierarch_Lee
  • Hierarch_Lee
  • 2016-02-26 17:15
  • 4256

swift UI专项训练42 用Swift代码实现页面跳转与传值

之前我们做过如果要点击一个按钮实现跳转到另一个按钮的办法,有时候我们需要通过一些动作来触发页面的跳转,比如摇动手机,这样就不能直接用连线的办法来实现跳转了,那么如何通过代码的方式来实现跳转呢?依旧使用过渡的方法,在storyboard中把要实现跳转的两张页面连线,注意不再局限于按钮等确定的实体和另一...
  • cg1991130
  • cg1991130
  • 2015-03-24 13:53
  • 11023

swift详解之二十二-----------UINavigationController的基本用法和页面传值几种方式

UINavigatioUInController的基本用法和页面传值几种方式本文介绍UINavigationController基本用法,因为涉及多页面顺便介绍页面传值1、手写代码创建UINavigationController手写方式创建很简单 , 首先创建一个项目 , 默认是从storyboar...
  • u010586842
  • u010586842
  • 2015-09-03 19:12
  • 5082

Swift 传值之代理传值

在Swift中,传值的方法有很多,都很简便,之前介绍了属性传值,swift的属性传值可以从下级页面传到上级页面,现在来介绍如何用代理传值。
  • zhangjitao_boke
  • zhangjitao_boke
  • 2016-01-29 14:14
  • 907

swift_004(Storyboard进行界面跳转及传值)

Storyboard进行界面跳转及传值 方法一         // 方法一 跳转(不用连线)         // 获取指定的Storyboard,name填写Storyboard的文件名 &...
  • shifang07
  • shifang07
  • 2016-10-28 16:52
  • 1268

《Swift 的界面之间的传值,详细介绍3种传值方式》 正向传值、协议传值、闭包

《Swift 的界面之间的传值,详细介绍3种传值方式》正向传值、协议传值、闭包    1、 控制器界面间的正向传值    /*    《Swift 的界面之间的传值,详细介绍3种传值方式》  ...
  • zhoushuangjian511
  • zhoushuangjian511
  • 2015-12-07 13:07
  • 4356

Swift实现IOS界面的跳转

IOS开发中界面跳转有两种方式,上下跳转和左右跳转。 上下跳转_TO: let secondViewController = SecondViewController() self.presentViewController(secondViewController, animated: true,...
  • tianmaxingkong_
  • tianmaxingkong_
  • 2016-02-21 16:53
  • 12043

Swift UIViewController页面跳转汇总

第一种类型:NavigationViewController跳转(右侧进入) 跳转: //实例化一个将要跳转的viewController let secondView = SecondViewController() //跳转 self.navigationController...
  • wei_chong_chong
  • wei_chong_chong
  • 2016-10-18 16:08
  • 1202

Swift-->UIViewController的跳转,参数传递,返回参数

UIViewController的跳转,可以在Storyboard里面通过拖拽Segue进行跳转,也可以在代码中进行跳转.本文分别介绍这2种方式.1:Storyboard的方式 跳转,传递参数 首先选中 一个Button –> 按住 control 键–> 然后拖拽到需要跳转的 Vie...
  • angcyo
  • angcyo
  • 2016-08-13 00:58
  • 3203
    个人资料
    • 访问:112751次
    • 积分:2637
    • 等级:
    • 排名:第16298名
    • 原创:156篇
    • 转载:27篇
    • 译文:0篇
    • 评论:9条
    最新评论