ui文本字段更新SKLabelNode

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ui文本字段更新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

其次,迅速没有分号。

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

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之前不会生效...

以上是关于ui文本字段更新SKLabelNode的主要内容,如果未能解决你的问题,请参考以下文章

如何在使用片段和计时器的选项卡式活动上更新 UI

xcode 在更新 UI 文本字段时因读取而崩溃

活动到片段通信:当我尝试从活动更新片段中的文本视图时,出现空指针异常

SKLabelNode 相关的 EXC_BAD_ACCESS 崩溃

带有 SKLabelNode 的文本工具包

将 SKLabelNode 添加到场景工具包视图