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

Swift纯代码页面传值

作者头像
Sheepy
发布2018-09-10 12:14:02
2.2K0
发布2018-09-10 12:14:02
举报
文章被收录于专栏:我杨某人的青春满是悔恨
Update: 之前的代码会造成循环引用,导致两个类都不能被正确回收,应做如下修改:
代码语言:javascript
复制
protocol BaseCtrlDelegate: class {
    func dismissPushedCtrl(controller: UIViewController)
}
//相同内容
class PushedCtrl: UIViewController {
    //相同内容

    weak var delegate: BaseCtrlDelegate!
}

页面跳转啊页面间传值啊,这是每个项目几乎都要用到的东西。近年来苹果一直都在推Storyboard,页面跳转可以直接在Storyboard上拉线,然后用segue或者unwind来做一些传值的操作,非常方便,这里就不细说了。

然而在实际开发中,由于各种原因或者因为个人喜好我们可能会用纯代码开发,当然也包括页面跳转跟页面传值。今天我就遇到了这种情况,由于之前一直是用segue跟unwind的,所以稍微折腾了一下才搞定,顺便也记录一下,希望能帮到有需要的人。

跳转方式就以最平常的Push为例,跳转的时候传值只需要在当前Controller中直接对将要跳转的Controller的一个实例对象进行操作即可(见代码注释),而在返回上个页面的时候进行传值就需要用到委托了,关于委托我之前有篇博文详细说过,今天就直接上代码了。

代码语言:javascript
复制
protocol BaseCtrlDelegate {
    func dismissPushedCtrl(controller: UIViewController)
}

class BaseCtrl: UIViewController, BaseCtrlDelegate {
    var baseMsg: String! {
        didSet {
            print("BaseCtrl:" + baseMsg)
        }
    }
    //获取即将出栈的ViewController的实例,相当于获取它内部的数据(如msg)
    func dismissPushedCtrl(controller: UIViewController) {
        if let pushedCtrl = controller as? PushedCtrl{
            //传值
            baseMsg = pushCtrl.backMsg
            loginCtrl.navigationController?.popViewControllerAnimated(true)
        }
    }
   
    //......

    //跳转按钮点击事件
    func push() {
        baseMsg = "I'm coming!"
        let pushedCtrl = PushedCtrl()
        //传值
        pushedCtrl.backMsg = baseMsg
        pushedCtrl.delegate = self
        self.navigationController?.pushViewController(pushedCtrl, animated: true)
    }
}

class PushedCtrl: UIViewController {
     //......
    var backMsg: String! {
        didSet {
            print("PushedCtrl:" + backMsg)
        }
    }
    var delegate: BaseCtrlDelegate!
    //返回按钮点击事件
    func back() {
        backMsg = "I'm back!"
        delegate.dismissPushedCtrl(self)
    }
}

这就是整个过程,在跳转和返回时都进行了传值操作。代码是直接在页面上写的,没调试过,大家可以补充完整然后跑一下看看。今天就先这样。

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Update: 之前的代码会造成循环引用,导致两个类都不能被正确回收,应做如下修改:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档