首页 > 移动平台 > 详细

IOS学习[Swift中跳转与传值、protocol传值方法问题]

时间:2016-01-15 22:38:35      阅读:1126      评论:0      收藏:0      [点我收藏+]

 

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指的是在类之间制定一套规定进行委托执行,一个类可以通过协议委托另外一个类执行方法

http://blog.csdn.net/whzhaochao/article/details/34903239?utm_source=tuicool&utm_medium=referral

这篇文章比较详细的说明了如何通过第二个界面调用第一个界面的delegate协议方法,从而改变第一个界面中的变量成员。

 

但是我根据这个代码实现的时候发现,在从第二个界面回到第一个界面的时候,第一个界面的Label值被重新定义了,虽然第二个界面成功的调用了第一个界面的方法与取值,但是不能成功的在第一个界面显示的时候进行更新。

 

通过查阅UIViewController的生命周期,由于每个界面从显示器消失后都会进行内存释放,因此第一个界面重新载入的时候其变量值也被初始化了。

但是为什么第二个界面能通过协议重新获取第一个界面的变量呢?

 

 


 

 

补充两种:

3. 利用 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 就可以满足需求.

 

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

 

4. 利用 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中跳转与传值、protocol传值方法问题]

原文:http://www.cnblogs.com/amourjun/p/amourjun.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!