关闭

当我们需要刷新一个数据时而那个界面又离我们太远 这时候我们可以用代理把他写出去, 首先写一个全局refresh类

标签: ios数据管理
76人阅读 评论(1) 收藏 举报
分类:

当我们需要刷新一个数据时而那个界面又离我们太远 这时候我们可以用代理把他写出去,

首先写一个全局refresh类

//刷新管理中心

class RefreshCenter: NSObject {

    这是一个字典 一个viewed 对应实现的协议当刷新viewid时就是对这个view的刷新 refreshable是一个协议

    private var badgeValues: [String: Refreshable?] = [:]

   


    private static var instance: RefreshCenter!

    


    private override init() {

        super.init()

    }

    //实例化这个类

    class func getInstance() -> RefreshCenter {

        if instance == nil {

            instance = RefreshCenter()

            instance.setDelegate(BadgeValueRequestClient())

        }

        return instance

    }

    

    func register(viewId: String, view: Refreshable) {

        self.badgeValues[viewId] = view

    }

    

    func unregister(viewId: String) {

        self.badgeValues[viewId] = nil

    }

    

    //刷新数据时 调用这个方法,但前提是要刷新的地方必须实现refreshable协议

    func refresh(viewId: String, data: NSObject?) {

        UIApplication.sharedApplication().applicationIconBadgeNumber = BadgeValues.applicationBadge

        self.badgeValues[viewId]??.refresh(viewId, data: data)

    }

    

   

}





refreshable的协议方法对应着refresh center的刷新方法


protocol Refreshable : NSObjectProtocol {

    

    func refresh(viewId: String, data: NSObject?)

    

}


当使用时只要实现这个方法 方法里写要用的数据, 然后仔仔需要刷新的地方调用刷新的方法即可

这是一个类 只要在类里面实现刷新registerViews的注册这个id 然后在实现这个refreshable的refresh方法

就是现了tableview的刷新

  private func registerViews() {

        RefreshCenter.getInstance().register("refreshed", view: self)

    }

    

    func refresh(viewId: String, data: NSObject?) {

        if viewId == SettingController.refreshId {

            tableView?.reloadData()

        }

    }


在任何一个地方调用这个方法都可以实现上述tableview的刷新

RefreshCenter.getInstance().refresh("refreshId", data: nil)


这个两个refreshID必须相同




0
0

  相关文章推荐
查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:10815次
    • 积分:408
    • 等级:
    • 排名:千里之外
    • 原创:28篇
    • 转载:3篇
    • 译文:3篇
    • 评论:4条
    文章分类