本文的所有代码均为swift1.2版本
NSNotificationCenter.defaultCenter().addObserverForName("userbookListNotification",
object: nil, queue: nil,
usingBlock: {
userbookListNotification ->Void in
println("通知传过来的数据为:\(userbookListNotification.object?.description)");
});
NSNotificationCenter.defaultCenter().postNotificationName("userbookListNotification", object: "我是发送的信息");
注意: 必须先添加观察者才能接受发送的通知 所以只适合从子页面传值到父页面
新的方式,在storybord
的A
和B
两个ViewController拖出一条segue
,假如从A
跳到B
在A
中添加以下代码
//通过segue传值
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
println("segue传值");
var dv = segue.destinationViewController as! UIViewController;
var result = dv.respondsToSelector(Selector("setUserBookListData"));
println("存在:\(result)");
if(result){
dv.setValue("123", forKey: "naviTitle");
}
}
注意:
setUserBookListData
是B
中必须有的方法naviTitle
是B
的属性,跳转后会被赋值为123
在A
中添加方法
@IBAction func returnToA(segue: UIStoryboardSegue){
var b = segue.sourceViewController as! BController;
println(b.ss);
}
B中的按钮拖一条线到BController
的Exit
上,选择returnToA
以下说一下NSUserDefaults的赋值与取值
var defaults = NSUserDefaults.standardUserDefaults();
defaults.setObject("psvmc", forKey: "userID");
defaults.setObject("123456", forKey: "userPassword");
defaults.synchronize();
var userId: String? = NSUserDefaults.standardUserDefaults().stringForKey("userID")
var appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
假设A传值到B
//定义协议
protocol AProtocol{
//协议中得方法不能有结构体
func sendData(tmpStr: String);
}
class AViewController: UIViewController {
var paramsProtocolDelegate: AProtocol?
func sendToB(){
self.paramsProtocolDelegate?.sendData("我是要传的数据");
}
}
class BViewController: UIViewController,AProtocol {
//该类需要遵守协议
var aViewController = AViewController();
override func viewDidLoad() {
super.viewDidLoad();
aViewController.paramsProtocolDelegate = self;
aViewController.sendToB();
}
//遵守协议必须重新实现一下协议中得方法
func sendData(tmpStr: String) {
println("传过来的值是:\(tmpStr)");
}
}
其实本质就是B把指针给了A,或者说是A保存了B的指针,A能调用B中实现的方法,从而把数据从A传给B