前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >iOS 页面传值

iOS 页面传值

作者头像
码客说
发布2019-10-22 14:05:16
1.4K0
发布2019-10-22 14:05:16
举报
文章被收录于专栏:码客

本文的所有代码均为swift1.2版本

通过通知传值

添加通知的观察者
代码语言:javascript
复制
NSNotificationCenter.defaultCenter().addObserverForName("userbookListNotification",
    object: nil, queue: nil,
    usingBlock: {
        userbookListNotification ->Void in
        println("通知传过来的数据为:\(userbookListNotification.object?.description)");
});
发送通知
代码语言:javascript
复制
NSNotificationCenter.defaultCenter().postNotificationName("userbookListNotification", object: "我是发送的信息");  

注意: 必须先添加观察者才能接受发送的通知 所以只适合从子页面传值到父页面


通过segue传值

新的方式,在storybordAB两个ViewController拖出一条segue,假如从A跳到B

A传值到B

A中添加以下代码

代码语言:javascript
复制
//通过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");

    }
}

注意: setUserBookListDataB中必须有的方法 naviTitleB的属性,跳转后会被赋值为123

从B返回到A传值

A中添加方法

代码语言:javascript
复制
@IBAction func returnToA(segue: UIStoryboardSegue){
   var b = segue.sourceViewController as! BController;
    println(b.ss);
}

B中的按钮拖一条线到BControllerExit上,选择returnToA


通过文件传值NSUserDefaults和Sqllite等

以下说一下NSUserDefaults的赋值与取值

赋值
代码语言:javascript
复制
var defaults = NSUserDefaults.standardUserDefaults();
defaults.setObject("psvmc", forKey: "userID");
defaults.setObject("123456", forKey: "userPassword");
defaults.synchronize();
取值
代码语言:javascript
复制
var userId: String? = NSUserDefaults.standardUserDefaults().stringForKey("userID")

通过AppDelegate传值

代码语言:javascript
复制
var appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate

通过协议

假设A传值到B

A类
代码语言:javascript
复制
//定义协议
protocol AProtocol{
    //协议中得方法不能有结构体
    func sendData(tmpStr: String);
}

class AViewController: UIViewController {
    var paramsProtocolDelegate: AProtocol?
    func sendToB(){
        self.paramsProtocolDelegate?.sendData("我是要传的数据");
    }
}
B类
代码语言:javascript
复制
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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2015-06-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 通过通知传值
    • 添加通知的观察者
      • 发送通知
      • 通过segue传值
        • A传值到B
          • 从B返回到A传值
          • 通过文件传值NSUserDefaults和Sqllite等
            • 赋值
              • 取值
              • 通过AppDelegate传值
              • 通过协议
                • A类
                  • B类
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档