从其他类Swift访问UI对象的属性

时间:2016-01-12 17:38:51

标签: ios swift

我在Swift 2.0中有这个类:

class CharacterSelectionController: UIViewController {
    @IBOutlet weak var scrollView: UIScrollView!
    @IBOutlet weak var scnView: SCNView!

    var characterArray = [CharacterInfo]()
    var scene: CharacterScene!

    override func viewDidLoad() {

        // Set up the SCNView
        scnView.backgroundColor = AppDelegate().lightBlueColor()
        scnView.showsStatistics = false
        scnView.antialiasingMode = SCNAntialiasingMode.Multisampling2X
        scnView.overlaySKScene = SKScene(size: view.bounds.size)
        scnView.playing = false

       // Start playing the scene
      scnView.scene = scene
      scnView.scene!.rootNode.hidden = false
      scnView.play(self)

在AppDelegate和其他类中,我必须将scnView设置为暂停,类似于scnView.pause(self)。但是,我似乎无法访问其他类中的视图或自我部分。我尝试用这种方式设置一些结构:

struct GlobalVariables {
    static var globalGameView: SCNView = SCNView()
}

然后设置globalGameView = scnView但它不起作用。我也尝试过:

    var myCustomViewController: CharacterSelectionController = CharacterSelectionController(nibName: nil, bundle: nil)
    myCustomViewController.scnView.pause(myCustomViewController)
    print(myCustomViewController.scnView)

但应用程序崩溃了...有什么想法吗?

1 个答案:

答案 0 :(得分:5)

您不应尝试访问其他视图控制器的视图对象。这违反了面向对象设计的封装原则。将另一个视图控制器的视图视为私有。

您应该做的是将公共方法添加到为您执行更改的其他视图控制器,以及调用该方法。这样,如果您决定在未来的某个日期使用Metal而不是SceneKit切换视图控制器来绘制其内容,那么您可以这样做,只有您的一个视图控制器必须更改。