ui 文本字段更新 SKLabelNode
ui text field updating SKLabelNode
我正在编写一个代码,允许用户通过将文本细分到 UI 文本字段来更新 SKLabelNode,如下所示。
理想情况下,我希望文本在他们键入时更新,一次一个字母。但我对如何做到这一点有点困惑?
目前我只有另一个按钮 "labelNode2",它在按下时更新文本。
import SpriteKit
import GameplayKit
class GameScene: SKScene, UITextFieldDelegate {
private var field : UITextField?
lazy var labelNode = self.childNode(withName: "labelNode") as? SKLabelNode
lazy var labelNode2 = self.childNode(withName: "labelNode2") as? SKLabelNode
override func didMove(to view: SKView) {
labelNode?.text = "Test"
}
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
for touch: AnyObject in touches {
let largeLocation = touch.location(in: self)
let nodes = self.nodes(at: largeLocation)
for node in nodes {
if node.name == "labelNode" {
labelNode?.text = "hello"
if (field == nil) {
field = UITextField()
field?.frame = CGRect(x:100,y:100, width:100, height:30)
field?.delegate = self;
field?.backgroundColor = .red
field?.isHidden = true;
self.view?.addSubview(field!)
}
field?.text = labelNode?.text
field?.becomeFirstResponder
}
else {
field?.resignFirstResponder
//To hide keyboard
}
if node.name == "labelNode2" {
labelNode?.text = field?.text
}
}
}
}
}
首先,我不得不注释掉你的行 field.isHidden = true
。
其次,swift中没有分号。
最后...添加这个,你应该没问题...
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
//labelNode?.text = field?.text
labelNode?.text = (field?.text as NSString?)?.replacingCharacters(in: range, with: string)
return true
}
为什么我要注释掉第一行?因为文本更改在您 return true...
之前不会生效
我正在编写一个代码,允许用户通过将文本细分到 UI 文本字段来更新 SKLabelNode,如下所示。 理想情况下,我希望文本在他们键入时更新,一次一个字母。但我对如何做到这一点有点困惑? 目前我只有另一个按钮 "labelNode2",它在按下时更新文本。
import SpriteKit
import GameplayKit
class GameScene: SKScene, UITextFieldDelegate {
private var field : UITextField?
lazy var labelNode = self.childNode(withName: "labelNode") as? SKLabelNode
lazy var labelNode2 = self.childNode(withName: "labelNode2") as? SKLabelNode
override func didMove(to view: SKView) {
labelNode?.text = "Test"
}
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
for touch: AnyObject in touches {
let largeLocation = touch.location(in: self)
let nodes = self.nodes(at: largeLocation)
for node in nodes {
if node.name == "labelNode" {
labelNode?.text = "hello"
if (field == nil) {
field = UITextField()
field?.frame = CGRect(x:100,y:100, width:100, height:30)
field?.delegate = self;
field?.backgroundColor = .red
field?.isHidden = true;
self.view?.addSubview(field!)
}
field?.text = labelNode?.text
field?.becomeFirstResponder
}
else {
field?.resignFirstResponder
//To hide keyboard
}
if node.name == "labelNode2" {
labelNode?.text = field?.text
}
}
}
}
}
首先,我不得不注释掉你的行 field.isHidden = true
。
其次,swift中没有分号。
最后...添加这个,你应该没问题...
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
//labelNode?.text = field?.text
labelNode?.text = (field?.text as NSString?)?.replacingCharacters(in: range, with: string)
return true
}
为什么我要注释掉第一行?因为文本更改在您 return true...
之前不会生效