UITextField在SpriteKit中作为子视图添加时不显示



我对Swift很陌生,我在SpriteKit中显示UITextField有一些麻烦。在SceneMenu中的Init()将不显示UITextField,而使用函数showTextField()与touchesBegan()工作。我怎么能显示UITextField没有用户点击按钮显示TextField?

GameViewController.swift:

class GameViewController: UIViewController {
override func viewDidLoad() {

let scene = SceneMenu(size: view.frame.size)
scene.scaleMode = .aspectFill
scene.backgroundColor = .white

let view = view as! SKView
view.presentScene(scene)

}
}

SceneMenu.swift:

class SceneMenu: SKScene {
override init(size: CGSize) {

super.init(size: size)

let btnAlert = SKLabelNode(text: "Show TextField")
btnAlert.name = "btn_text"
btnAlert.fontSize = 20
btnAlert.fontColor = SKColor.blue
btnAlert.fontName = "Avenir"
btnAlert.position = CGPoint(x: size.width / 2, y: size.height / 2)
addChild(btnAlert)
let textFieldFrame = CGRect(origin: CGPoint(x: 100, y: 300), size: CGSize(width: 200, height: 30))
let textField = UITextField(frame: textFieldFrame)
textField.backgroundColor = SKColor.blue
textField.placeholder = "Type name"
view?.addSubview(textField)

}
required init?(coder aDecoder: NSCoder) {

fatalError("init(coder:) has not been implemented")

}
func showTextField() {

let textFieldFrame = CGRect(origin: CGPoint(x: 100, y: 100), size: CGSize(width: 200, height: 30))
let textField = UITextField(frame: textFieldFrame)
textField.backgroundColor = SKColor.blue
textField.placeholder = "Type name"
view?.addSubview(textField)

}
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {

if let touch = touches.first {

let location = touch.location(in: self)
let action = atPoint(location)

if action.name == "btn_text" {

showTextField()

}

}

}
}

SKScene有一个方法,可以让您在移动到场景时设置场景。所以,代替使用自定义类的初始化器,重写并使用SKScene的didMove(to view: SKView)方法。一个例子:

override func didMove(to view: SKView) {
showTextField()
}

最新更新