storyboard view之间传值swift

来源:互联网 发布:finale2016打谱软件 编辑:程序博客网 时间:2024/06/05 05:42

关于view之间传值,大概可以采用segue,notification和delegate这三种方法,其中segue只能单向的从view传值到detailView,关于segue和notification的方法,大家可以参考这篇blog点击打开链接。这里简单谈一下delegate的方法。

delegate委托顾名思义就是一个viewcontrollerA委托另外一个viewcontrollerB执行某个方法。假设我们的界面是这样:


A界面跳转到B界面,B界面有值要传递给A界面。那么我们需要A实现某个协议,主要协议定义的方法,然后B调用这个方法,在参数中将值传递给A。

所以这里我们有A中定义一个协议。

protocol ncDelegate {    func nchange (n: NSInteger);}
然后在A中实现协议中定义的方法。

func nchange(n: NSInteger) {                println("nchange")    }
在B中我们需要调用这个方法于是我们要先有一个该协议的声明变量。

var delegate:ncDelegate!
然后我们直接可以调用delegate的方法传值(_data)即可。

delegate.nchange(_data)
但是这里我们虽然声明了一个ncDelegate类型的变量delegate,但是我们不知道B中delegate委托的是谁,虽然A实现了ncDelegate协议,但可能还有其它类也实现了,所以

我们需要指明B的委托对象。这时我们遇到一个问题:

如果在A中指定B.delegate = A那么我们需要获得B的实例,如果在B中指定B.delegate = A我们需要获得A的实例,但是我们不能简单的new一个实例,因为我们采用的是storyboard

绑定的方式,如果new一个新的,将不会是我们storyboard的中绑定的那个,所以我们必须在A的prepareforsegue中声明委托对象,这里借助segue可以知道storyboard中的实例:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {        var dest: SecondViewController = segue.destinationViewController as SecondViewController                dest.delegate = self    }

这样就解决了这个问题。如果是A向B传值可以直接借助这个prepareforsegue的方法。

0 0
原创粉丝点击