首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使SKLabelNode可编辑

使SKLabelNode可编辑
EN

Stack Overflow用户
提问于 2014-06-09 22:07:35
回答 1查看 1.2K关注 0票数 3

我试图找出一种方法,在点击SKLabelNode时打开键盘,然后使该标签可编辑,类似于UITextView或UITextField。

我已经在UITextView中添加了一个SKScene,但是因为它位于场景的顶端,所以它是一个相当笨重的解决方案。我宁愿尝试两件事中的一件: 1.键盘在被点击时出现,或者最糟糕的情况是键盘总是打开,任何输入都反映在SkLabelNode上。

为了不重新发明轮子,是否可以定制SKLabelNode,使其更像UITextView或UITextField?

目标C或Swift的答案会很好。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-10 09:40:54

你说的话很接近于重新发明轮子。顾名思义,SKLabelNode并不是用来充当文本字段的。这里最大的问题是触发键盘并将任何输入传输到label节点。

这里有个解决办法。您可以维护UITextField并将其隐藏在SKView上。它的目的是处理来自键盘的输入,这些输入将反映在SKLabelNode上。

需要添加以下代码-- SKScene类。它起作用了,我自己也验证过了。

维护UITextField的实例变量。我假设标签节点也可以从类中的任何地方访问。

代码语言:javascript
运行
复制
UITextField *field;
SKLabelNode *labelNode; //For demonstrative purposes 

按以下方式处理SKLabelNode上的触摸

代码语言:javascript
运行
复制
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *touch = [touches anyObject];
    CGPoint point = [touch locationInNode:self];

    SKNode *node = [self nodeAtPoint:point];
    if ([node isEqual:labelNode])
    {
        if (field == nil)
        {
            field = [[UITextField alloc]initWithFrame:CGRectMake(10, 10, 100, 30)];
            field.delegate = self;
            field.hidden = true;
            [self.view addSubview:field];
        }

        field.text = labelNode.text;
        [field becomeFirstResponder];

    }
    else
    {
        [field resignFirstResponder];
        //To hide keyboard when tapped outside the label.
    }
}

注意,我们正在将UITextFielddelegate设置为self,这样我们就可以在下面的方法中编辑文本字段中的文本。

代码语言:javascript
运行
复制
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    NSString *newString = [textField.text stringByReplacingCharactersInRange:range withString:string];
    labelNode.text = newString;
    return YES;
}

请注意,您必须在场景的头文件中实现UITextFieldDelegate。

代码语言:javascript
运行
复制
@interface MyScene : SKScene <UITextFieldDelegate>

警告词

虽然前面提到的解决方法可能会达到您在问题中所描述的目的,但由于缺少与之配套的各种视觉辅助工具,SKLabelNode仍然不能作为编辑文本的有效工具(例如。(光标、突出显示等)。

仍然最好使用UIKit进行表单和文本编辑。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24129838

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档