在选项卡式视图控制器之间传递Swift中的简单变量数据(更新标签)

时间:2015-01-16 02:19:44

标签: ios swift uiviewcontroller

我的情况很简单:

我创建了一个新文件(选项卡式应用程序),然后我默认获得了Tab Bar控制器和第一个和第二个视图控制器(VC1和VC2)。

我在名为'totalCash'VC1和VC2的标签上放置了一个标签。在VC1中,我做了一个简单的等式。说X = y-z。做totalCash.text并在VC1中更新我的标签,一切都很棒!

现在我想学习:

当我在VC1中更新我的标签时,我该怎么做呢?当我点击模拟器中的第二个标签时,VC2中的标签也会更新该值,反之亦然。因此,如果我在VC2中购买更多项目并且我的totalCash发生故障,那么当我点击标签然后返回时,它会在VC1的标签中更新?

1 个答案:

答案 0 :(得分:0)

这取决于您设置的数据。如果每个VC管理自己的数据,并且您需要的是更新其他选项卡中的数据,则使用NSNotificationCenter发送任何更新的通知。

如果所有VC共享数据,您可以继承UITabBarController并在那里添加变量。然后每个VC都可以调用self.tabBarController.myVariableName。使用KVO监控更新。就像Jonny在评论中所说的那样

如果数据在整个应用中共享,您可以使用单例共享公共数据。 (单身人士难以管理,难以追踪变化)

swift的单例模式

class Singleton {

    var sharedString = "shared string"

    var sharedInt = 54

    class var sharedInstance: Singleton {
        struct Static {
            static var instance: Singleton?
            static var token: dispatch_once_t = 0
        }

        dispatch_once(&Static.token) {
            Static.instance = Singleton()
        }

        return Static.instance!
    }
}

调用Singleton.sharedInstance以获取共享对象。

您可以设置或获取共享变量,如

    let shared = Singleton.sharedInstance

    let sharedString = shared.sharedString

   shared.sharedString = "hello world"