Ios 使用函数更新其他类中的标签

Ios 使用函数更新其他类中的标签,ios,swift,sprite-kit,Ios,Swift,Sprite Kit,我试图显示从另一个类发送的消息。我用一个函数来做这个。但问题是,当我更改ViewController时,消息不会显示 设置消息: StartViewController().showMessage(message: "Test Message", color: UIColor.green) func showMessage(message: String, color: UIColor){ messageLabel = SKLabelNode(fontNamed: "Verdana"

我试图显示从另一个类发送的消息。我用一个函数来做这个。但问题是,当我更改ViewController时,消息不会显示

设置消息:

StartViewController().showMessage(message: "Test Message", color: UIColor.green)
func showMessage(message: String, color: UIColor){

    messageLabel = SKLabelNode(fontNamed: "Verdana")
    messageLabel.text = message
    messageLabel.fontSize = 15
    messageLabel.fontColor = color
    messageLabel.position = CGPoint(x: self.size.width / 2, y: self.size.height / 2)

    self.addChild(messageLabel)
}
显示消息:

StartViewController().showMessage(message: "Test Message", color: UIColor.green)
func showMessage(message: String, color: UIColor){

    messageLabel = SKLabelNode(fontNamed: "Verdana")
    messageLabel.text = message
    messageLabel.fontSize = 15
    messageLabel.fontColor = color
    messageLabel.position = CGPoint(x: self.size.width / 2, y: self.size.height / 2)

    self.addChild(messageLabel)
}
(这是两个不同的文件和视图控制器)


谢谢你的帮助

将新vc存储在属性中并推送/呈现它

self.startVC = StartViewController()
self.navigationController?.pushViewController(self.startVC, animated: true)
当您想显示消息时,只需调用
showMessage()
func

self.startVC.showMessage()

我认为在这里,UIKitSpriteKit之间有点混淆

ViewController
没有成员
addChild
,我想您应该谈谈
SKNode
对象

SpriteKit中,如果要显示
SKNode
元素或继承
SKNode
的对象,首先应将视图强制转换为
SKView
,然后实例化并呈现
SKScene
,如“Hello world”项目中所述:

class GameViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        if let view = self.view as! SKView? {
            // Load the SKScene from 'GameScene.sks'
            if let scene = SKScene(fileNamed: "GameScene") {
                // Set the scale mode to scale to fit the window
                scene.scaleMode = .aspectFill
                // Present the scene
                view.presentScene(scene)
            }
            view.ignoresSiblingOrder = true
            view.showsFPS = true
            view.showsNodeCount = true
        }
    }
}
class GameScene: SKScene {
    override func didMove(to view: SKView) {
        print("This is my GameScene, here I could show my SKLabelNode")
    } 
}
此外,在SpriteKit中,不需要更改viewController来显示元素,您可以显示新的
SKScene
或直接显示
SKNode


要帮助您了解您的功能,您还可以执行以下操作:

func showMessage(message: String, color: UIColor,pos:CGPoint)->SKLabelNode{
        let messageLabel = SKLabelNode(fontNamed: "Verdana")
        messageLabel.text = message
        messageLabel.fontSize = 15
        messageLabel.fontColor = color
        return messageLabel
}
用法

let messagePos = CGPoint(x: self.size.width / 2, y: self.size.height / 2)
let messageLabel = showMessage(message:"Test Message", color: UIColor.green, pos:messagePos)
self.addChild(messageLabel)

StartViewController()
正在初始化一个新的
StartViewController
,然后调用该方法。您需要参考当前的
StartViewController
@Caleb谢谢您的回答!我可以问你怎么做吗?我在谷歌上找不到关于这个的教程。@stefffeyens嗨,steff,你可以在XCode 8-File-New-project(tab应用程序)中找到一个有用的项目,然后选择Game。这里有一个带有“Hello world”标签的SpriteKit演示。希望它能帮助你。