【问题标题】:How to set children class property in swift如何快速设置子类属性
【发布时间】:2015-11-24 13:02:42
【问题描述】:

在左侧的视图控制器 ModuleDetailsVC 上,我有一个名为 moduleId 的类属性。我的问题是我想将此属性传递给 ChartVC,以便生成相应的图形。 我有一个容器视图,因为我的图表视图需要一个不同的视图控制器。

class ModuleDetailsVC: UIViewController {
  @IBOutlet weak var chartSubView: UIView!
  private var _module: Module?

  [...]
}

class ChartVC: UIViewController {
  var moduleId: Int!

  func setModuleId(moduleId: Int) {
    self.moduleId = moduleId
  }

  [...]
}

在哪里调用 ChartVC.setModuleId()?如果调用这是正确的解决方案...(我已经尝试过 ViewDidLoad/Appear / SubViewLayout...等

PS:标题可能完全错误,如果您有任何想法,请编辑。

【问题讨论】:

  • 谢谢,我会读这个。通过问这个问题,我还想确认我的设计是合法的,没有更好的选择。即使我知道没有“完美”的解决方案,你能确认一下吗
  • @Shoaib 好的,我现在只是第一个链接,我已经知道了。我已经将这种技术用于我通常的视图来查看使用 segue 传递的数据。但对我来说,我描述的情况不是模拟的,因为我使用的是容器视图,并且我已经尝试使用 segue 进行数据传递而没有结果。 (我猜 segue 没有像往常一样使用?)如果你知道如何使用这个 segue,请启发我 :)
  • 好的,阅读完另外两个链接,它们也是关于 segues 的,这是我已经知道的东西。我只是不知道如何将它应用于这种“类型”的 segue:/
  • 您能否分享显示ChartVC 的代码或解释您是如何将其连接到故事板中的?

标签: ios swift view xcode6 uicontainerview


【解决方案1】:

将触发 segue 以显示容器视图的视图控制器是其父视图控制器。在您的情况下,这是左侧的控制器 - ModuleDetailsVC

为了将数据传递给容器视图的控制器ChartVC,您只需要覆盖呈现控制器中的prepareForSegue (ModuleDetailsVC)。

class ModuleDetailsVC: UIViewController {
    private var module: Module

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        if let chartVC = segue.destinationViewController as? ChartVC {
            chartVC.setModuleId(module.id)
        }
    }
}

class ChartVC: UIViewController {
    var moduleId: Int!

    func setModuleId(moduleId: Int) {
        self.moduleId = moduleId
    }
}

【讨论】:

  • 该死,我一开始试过这个,但是我用segue标识符检索了segue,并且无法让它工作。是因为我无法使用 segue 标识符吗?非常感谢。
  • 那我的问题没用,我一定是犯了一个愚蠢的错误,因为所有这些东西都很琐碎,只是我第一次使用 ViewContainer,所以我把错误放在了它上面,并没有不要三重检查一切。谢谢
猜你喜欢
  • 2021-06-07
  • 2017-01-07
  • 1970-01-01
  • 2015-06-23
  • 1970-01-01
  • 2020-11-24
  • 2011-11-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多