ui文本字段更新SKLabelNode

问题描述 投票:0回答:1

我正在编写一个代码,允许用户通过将文本分成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
                }  
            }
        }
    }
}
swift text sprite-kit field
1个回答
0
投票

首先,我不得不评论你的线field.isHidden = true

其次,迅速没有分号。

最后......添加这个,你应该没事......

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
}

我为什么要评论第一行?因为文本更改在您返回true之前不会生效...

© www.soinside.com 2019 - 2024. All rights reserved.