关于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的方法。