如何在不使用 Segue 的情况下在单独的 UIViewController 中选择实例变量

Posted

技术标签:

【中文标题】如何在不使用 Segue 的情况下在单独的 UIViewController 中选择实例变量【英文标题】:How to Select an Instance Variable in a Separate UIViewController Without Using a Segue 【发布时间】:2015-09-24 15:25:19 【问题描述】:

我正在尝试选择并设置一个属于另一个 UIViewController 的实例变量,但是,我不知道如何选择另一个 ViewController 并在不使用 segue 的情况下访问其内容。

每当用户检查任务时,应计算已完成任务的百分比,并应设置另一个视图控制器的实例变量。

我意识到我目前正在实例化一个新的视图控制器,而不是选择故事板上已有的那个。我正在使用位于主视图后面的第三方侧边栏菜单,尽管它确实作为单独的场景/视图控制器存在。应该注意的是,这个侧边栏菜单不使用 segue 显示本身。有什么方法可以选择另一个视图控制器并访问它的实例变量吗?

@IBAction func checkOffTask(sender: UIButton) 

    // Select sidebar view controller
    let sidebarViewController = self.storyboard?.instantiateViewControllerWithIdentifier("sideBarScene") as! SideBarViewController

    // Calculate percentage of completed tasks
        // Select the count of all tasks
        let allTasksCount = Float(firstDataSource.count + secondDataSource.count)

        // Select the count of all completed tasks
        let completedTasksCount = Float(secondDataSource.count)

        // Divide the two to get a percentage
        var completedTaskPercentage = completedTasksCount / allTasksCount

        sidebarViewController.completedTaskPercentageTemporary = String(stringInterpolationSegment: completedTaskPercentage)

    println(sidebarViewController)
    println(sidebarViewController.completedTaskPercentageTemporary)

【问题讨论】:

现有的“sideBarScene”是如何创建的?创建它的对象可以保存引用并将其提供给此代码吗?如果不是,请将 NSNotification 视为在不相关对象之间进行通信的一种方式。 sideBarScene 只是故事板上的一个 UIViewController,标识符为“sideBarScene”。 但是必须在运行的应用程序中初始化对象。 【参考方案1】:

一个技巧可以是找出当前可见的视图控制器并在其上设置属性。 This thread 可能会帮助您做到这一点。

另一种方法是在故事板初始化目标视图控制器的对象时获取它。为此,您需要依赖 prepareForSegue:sender: 方法。保存对象后,您可以传递它并使用它来设置属性。

【讨论】:

以上是关于如何在不使用 Segue 的情况下在单独的 UIViewController 中选择实例变量的主要内容,如果未能解决你的问题,请参考以下文章

如何在不连接它们的情况下在 MapView 上绘制两个 MKPolygons?

如何在不启动模拟器的情况下在 Eclipse 中将 Android 项目编译为 .apk 文件?

如何在没有 segue 的情况下在 Swift 3 中将数据从 VC 传递到另一个?

如何在不配对的情况下在远程设备中安装 J2ME .jar 文件?

如何在不使用 AudioQueueRef 的情况下在 AudioQueue 中设置音量?

如何在不使用 &nbsp 的情况下在行内元素之间添加空格 [重复]