Swift 如何将UITextField添加到SKScene(SpriteKit游戏)

Swift 如何将UITextField添加到SKScene(SpriteKit游戏),swift,sprite-kit,Swift,Sprite Kit,我一直在寻找解决这个问题的办法。已经提出的许多问题要么没有得到回答,要么解释得非常模糊 我正在尝试将UITextField添加到我的SKScene中,因为玩家需要能够为此游戏创建帐户 var txtField:UITextField! 这里我声明文本字段 txtField = UITextField(frame: CGRect(x: frame.midX, y: frame.midY, width: 200, height: 30)); view.addSubview(txtField!)

我一直在寻找解决这个问题的办法。已经提出的许多问题要么没有得到回答,要么解释得非常模糊

我正在尝试将UITextField添加到我的SKScene中,因为玩家需要能够为此游戏创建帐户

var txtField:UITextField!
这里我声明文本字段

txtField = UITextField(frame: CGRect(x: frame.midX, y: frame.midY, width: 200, height: 30));
view.addSubview(txtField!)
通过这两行,我试图将文本字段添加为子视图。运行应用程序时,文本字段不可见。我做错了什么?是否需要更改此子视图的位置


非常感谢您在这方面的帮助!:)

如果要将
UITextField
添加到场景中,请确保使用可见的
SKView
调用
addSubview
,您可以检查以下代码:

import SpriteKit
import PlaygroundSupport

let sceneFrame = CGRect(origin: .zero, size: CGSize(width: 200, height: 200))
var scene = SKScene(size: sceneFrame.size)
scene.backgroundColor = UIColor.lightGray

let textFieldFrame = CGRect(origin: .zero, size: CGSize(width: 200, height: 30))
let textField = UITextField(frame: textFieldFrame)
textField.backgroundColor = UIColor.white
textField.placeholder = "hello world"

let skView = SKView(frame: sceneFrame)
skView.addSubview(textField)
skView.presentScene(scene)
PlaygroundPage.current.liveView = skView
结果是:


我最近提出了两个功能,这两个功能对未来的发展很有帮助

func createTextField (at: CGPoint, size: CGSize, isSecure: Bool = false) -> NSTextField {
    var newSize = size
    newSize.width *= (self.view?.frame.width)! / self.frame.width
    newSize.height *= (self.view?.frame.height)! / self.frame.height

    var pos = convertPoint(toView: at)
    pos.x -= (newSize.width / 2)
    pos.y -= (newSize.height / 2)

    return !isSecure ? NSTextField (frame: NSRect (x: pos.x, y: pos.y, width: newSize.width, height: newSize.height)) : NSSecureTextField (frame: NSRect (x: pos.x, y: pos.y, width: newSize.width, height: newSize.height))
}

func createTextField (spriteNamed: String, isSecure: Bool = false) -> NSTextField {
    let node = self.childNode(withName: spriteNamed) as! SKSpriteNode
    let pos = convert(node.position, from: node.parent!)

    node.removeFromParent()

    return createTextField(at: pos, size: node.size, isSecure: isSecure)
}

这些函数允许您向场景中添加普通的SkSpritEndode,并将其替换为NSTextFields。

“如何将UITextField添加到SKScene(SpriteKit游戏)”UITextField不属于SKScene。我很抱歉。我现在已经移除了“SKScene”标签。新的这里:/这工作-感谢这一点。我在“启动”场景文件中添加了子视图,而不是在GameViewController中。如何在游戏场景中引用此子视图?