***************************************转载请注明出处:http://blog.csdn.net/lttree********************************************



本文主要讲述文本输入的小编。

这个的作用就不用多说,还是很重要的,

cocos2d-x 引擎对于文本输入 有两个类可以实现,

一个是 —— CCTextFieldTTF

另一个是 —— CCEditBox

本文就主要说一下 第一个 CCTextFieldTTF,在 文本输入<2> 的时候再说 CCEditBox。



一、简介

这个类,在3.4 API 中的继承图是酱紫的:


可以看到,这个类继承自 Label 和 IMEDelegate(为子类提供虚拟键盘功能),

所以也有种说法,它就是个通过监听输入的字符而时时更新的Label而已。



二、相关操作

1. 创建

要注意,这里的创建并不是用 create了,但有两种方式

第一种,就是这样的,自己定义文本框大小、对齐方式

/** creates a TextFieldTTF from a fontname,alignment,dimension and font size */
    static TextFieldTTF * textFieldWithPlaceHolder(const std::string& placeholder,const Size& dimensions,TextHAlignment alignment,const std::string& fontName,float fontSize);

参数分别是:

placeholder 文本框默认内容(没有字符的时候的内容)

dimensions 文本框大小

alignment 文本框内容对齐方式

fontName 文本框采用的字体

fontSize 文本框字体大小

PS:关于 TextHAlignment 有

enum class CC_DLL TextHAlignment
{
    LEFT,CENTER,RIGHT
};


第二种就是,只定义字体种类、大小 和 默认内容,大小等于Label大小,如果内容超过编辑框大小会自动扩展:

/** creates a TextFieldTTF from a fontname and font size */
static TextFieldTTF * textFieldWithPlaceHolder(const std::string& placeholder,float fontSize);

参数和上面的意义一样,就不写了。


2.其他操作

<1> 设置文本框默认内容,默认内容的字体颜色

// 设置/获取 文本框默认内容
virtual void setPlaceHolder(const std::string& text);
virtual const std::string& getPlaceHolder() const;
// 设置/获取 文本框默认内容颜色
virtual const Color4B& getColorSpaceHolder();

virtual void setColorSpaceHolder(const Color3B& color);
virtual void setColorSpaceHolder(const Color4B& color);

<2> 编辑框内容

// 设置/获取 编辑框内容
virtual void setString(const std::string& text) override;
virtual const std::string& getString() const override;
// 设置 编辑框内容颜色
virtual void setTextColor(const Color4B& textColor) override;

<3> 虚拟键盘

//开启虚拟键盘  
virtual bool attachWithIME();
//关闭虚拟键盘 
virtual bool detachWithIME(); 

<4> 密码

// 如果输入的是密码,让输入的东西全是 * ,一个字母是一个*,一个汉字是3个*
textEdit->setSecureTextEntry(true);


<5> 字符个数

// 获取 文本框内容字符个数
inline int getCharCount() const { return _charCount; };


至于其他的一些操作,自行看API吧...

这里就不再赘述



三、Do it

现在来一个小例子,展现一下吧

创建文本框

// 创建文本框1
textEdit = CCTextFieldTTF::textFieldWithPlaceHolder("Please input:","Arial",36);  
textEdit->setPosition(Vec2(visibleSize.width/2,visibleSize.height/2));  
textEdit->setColorSpaceHolder(Color3B::BLUE);
this->addChild(textEdit);  


设置4个按钮,对文本框进行操作:

// 文字按钮——密码 模式
auto btn_psw = MenuItemFont::create("password",CC_CALLBACK_1(TextInput::menupswCallback,this));  
btn_psw->setPosition(Vec2(btn_psw->getContentSize().width,visibleSize.height/4)); 
	
// 文字按钮——展示 文本框内容
auto btn_show = MenuItemFont::create("show",CC_CALLBACK_1(TextInput::menushowCallback,this));
btn_show->setPosition(Vec2(btn_psw->getContentSize().width*2,visibleSize.height/4));

// 文字按钮——计算文本框内字符个数
auto btn_count = MenuItemFont::create("count",CC_CALLBACK_1(TextInput::menucountCallback,this));
btn_count->setPosition(Vec2(btn_psw->getContentSize().width,visibleSize.height/6));

// 文字按钮——改变文本框内字体颜色
auto btn_color = MenuItemFont::create("color",CC_CALLBACK_1(TextInput::menuchangeColorCallback,this));
btn_color->setPosition(Vec2(btn_psw->getContentSize().width*2,visibleSize.height/6));


相应函数的设定:

// 触摸事件
bool TextInput::onTouchBegan(CCTouch* touch,CCEvent* ev)  
{  
    //用于判断是否点中了控件  
    bool isClicked = textEdit->boundingBox().containsPoint(touch->getLocation());  

    //如果点中了控件  
	if( isClicked )  
    {  
        //弹出软键盘  
        textEdit->attachWithIME();  
    }
	else
	{
		textEdit->detachWithIME();
	}

    //表示接受触摸消息  
    return true;  
} 

// 是否设置成 密码 模式
void TextInput::menupswCallback(cocos2d::Ref* pSender)
{
	if( textEdit->isSecureTextEntry() )
	{
		textEdit->setSecureTextEntry(false);
	}
	else
	{
		textEdit->setSecureTextEntry(true);
	}
}

// 展示文本框内容
void TextInput::menushowCallback(cocos2d::Ref* pSender)
{
	auto label = (Label*) this->getChildByTag(111);
	label->setString(textEdit->getString());
}

// 计算文本框内容字符个数
void TextInput::menucountCallback(cocos2d::Ref* pSender)
{
	auto label = (Label*) this->getChildByTag(112);
	label->setString( StringUtils::format(" %d ",textEdit->getCharCount()) );
}

// 改变文本框字体颜色
void TextInput::menuchangeColorCallback(cocos2d::Ref* pSender)
{
	textEdit->setColor(Color3B::GREEN);
}


Ok,运行一下(界面有点渣呀。。小测试,不要在意这些细节。。)




关于CCTextFieldTTF 就到这里了,

测试小例子的全部内容并非只有这些。。

有些内容没有写出来,

完整版测试内容 -> 这里




********************************************

Cocos2d-x 3.4 之 文本输入之 CCTextFieldTTF的更多相关文章

  1. 使用placeholder属性设置input文本框的提示信息

    这篇文章主要介绍了使用placeholder属性设置input文本框的提示信息,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下

  2. ios7 – WebView:IFRAME中的文本框停止接受输入

    的test.html:input.html:点按文本框内部并尝试输入.一切正常.现在点击文本框外部,然后再次点击内部,或者隐藏并显示虚拟键盘.现在打字不再起作用了.有没有人见过这个?id=133044中很难找到但已知的错误

  3. Swift UITextField,UITextView,UISegmentedControl,UISwitch

    下面我们通过一个demo来简单的实现下这些控件的功能.首先,我们拖将这几个控件拖到storyboard,并关联上相应的属性和动作.如图:关联上属性和动作后,看看实现的代码:

  4. Swift UI专项训练2 本地化及自动布局

    首先我们新建一个工程,然后来做本地化,本地化就是根据用户设置的语言等等信息来显示。那么如何来设置呢,打开我们的工程,点开SupportingFiles中的Info.plist。现在我们来编辑第一个页面。在storyboard中增加一个文本框。自动布局就是我的文本框根据设备尺寸自动调整,专业术语叫约束,如何对文本框进行约束?

  5. [Swift]UIKit学习之UITextField的用法

    UIKit学习之UITextField的用法UITextField的创建:在Stroyboard中使用Ctrl+Drag拖拽法创建代码创建参考资料:

  6. Swift - 文本输入框UITextField的用法

    1,文本框的创建,有如下几个样式:UITextBorderStyle.None:无边框UITextBorderStyle.Line:直线边框UITextBorderStyle.RoundedRect:圆角矩形边框UITextBorderStyle.Bezel:边线+阴影1234lettextField=UITextField(frame:CGRectMake(10,160,200,30))//设置

  7. Swift - 点击输入框外部屏幕关闭虚拟键盘

    我们如果把文本框的ReturnKey设置成Done,然后在storyboard中将文本框的DidEndOnExit事件在代码里进行关联。如果要实现当用户点击文本框之外的舞台屏幕时也能关闭虚拟键盘。这时就要让屏幕的背景响应TouchDown事件。由于背景是UIView控件,不能直接拖拽关联Touch事件。点击右上角的Showtheidentityinspector图标,设置CustomClass的Class为UIControl就可以事件关联了。

  8. Swift - 文本输入框内容改变时响应,并获取最新内容

    同时在viewDidLoad方法内将文本框的代理设置为当前实例。然后实现textFile的shouldChangeCharactersInRange方法就能在文本框将要变化的时候执行一些代码。比如在这个方法内打印出文本框的内容,会发现每当我们改变文本框的内容时,打印出来的是上一次的内容。再输入2,文本框上是12,但打印出来却是1.要获取最新内容,则需要String的stringByReplacingCharactersInRange方法,但这个方法在Swift的String中又不支持。

  9. Swift中TextField

    //判断文本框是否为空ifIDTextField?

  10. swift – 当焦点在搜索栏上时,如何向UISearchController添加另一个文本框?

    当用户将焦点放在搜索栏上,正好位于导航栏上的“搜索栏”下方时,我正在尝试为“位置”输入添加另一个文本框.我有什么,我想要去的例子:我试过这样的东西,这不行:任何帮助将是伟大的!

随机推荐

  1. 【cocos2d-x 3.x 学习笔记】对象内存管理

    Cocos2d-x的内存管理cocos2d-x中使用的是上面的引用计数来管理内存,但是又增加了一些自己的特色。cocos2d-x中通过Ref类来实现引用计数,所有需要实现内存自动回收的类都应该继承自Ref类。下面是Ref类的定义:在cocos2d-x中创建对象通常有两种方式:这两中方式的差异可以参见我另一篇博文“对象创建方式讨论”。在cocos2d-x中提倡使用第二种方式,为了避免误用第一种方式,一般将构造函数设为protected或private。参考资料:[1]cocos2d-x高级开发教程2.3节[

  2. 利用cocos2dx 3.2开发消灭星星六如何在cocos2dx中显示中文

    由于编码的不同,在cocos2dx中的Label控件中如果放入中文字,往往会出现乱码。为了方便使用,我把这个从文档中获取中文字的方法放在一个头文件里面Chinese.h这里的tex_vec是cocos2dx提供的一个保存文档内容的一个容器。这里给出ChineseWords,xml的格式再看看ChineseWord的实现Chinese.cpp就这样,以后在需要用到中文字的地方,就先include这个头文件然后调用ChineseWord函数,获取一串中文字符串。

  3. 利用cocos2dx 3.2开发消灭星星七关于星星的算法

    在前面,我们已经在GameLayer中利用随机数初始化了一个StarMatrix,如果还不知道怎么创建星星矩阵请回去看看而且我们也讲了整个游戏的触摸事件的派发了。

  4. cocos2dx3.x 新手打包APK注意事项!

    这个在编译的时候就可以发现了比较好弄这只是我遇到的,其他的以后遇到再补充吧。。。以前被这两个问题坑了好久

  5. 利用cocos2dx 3.2开发消灭星星八游戏的结束判断与数据控制

    如果你看完之前的,那么你基本已经拥有一个消灭星星游戏的雏形。开始把剩下的两两互不相连的星星消去。那么如何判断是GameOver还是进入下一关呢。。其实游戏数据贯穿整个游戏,包括星星消除的时候要加到获得分数上,消去剩下两两不相连的星星的时候的加分政策等,因此如果前面没有做这一块的,最好回去搞一搞。

  6. 利用cocos2dx 3.2开发消灭星星九为游戏添加一些特效

    needClear是一个flag,当游戏判断不能再继续后,这个flag变为true,开始消除剩下的星星clearSumTime是一个累加器ONE_CLEAR_TIME就是每颗星星消除的时间2.连击加分信息一般消除一次星星都会有连击信息和加多少分的信息。其实这些combo标签就是一张图片,也是通过控制其属性或者runAction来实现。源码ComboEffect.hComboEffect.cpp4.消除星星粒子效果消除星星时,为了实现星星爆裂散落的效果,使用了cocos2d提供的粒子特效引擎对于粒子特效不了

  7. 02 Cocos2D-x引擎win7环境搭建及创建项目

    官网有搭建的文章,直接转载记录。环境搭建:本文介绍如何搭建Cocos2d-x3.2版本的开发环境。项目创建:一、通过命令创建项目前面搭建好环境后,怎样创建自己的Cocos2d-x项目呢?先来看看Cocos2d-x3.2的目录吧这就是Cocos2d-x3.2的目录。输入cocosnew项目名–p包名–lcpp–d路径回车就创建成功了例如:成功后,找到这个项目打开proj.win32目录下的Hello.slnF5成功了。

  8. 利用cocos2dx 3.2开发消灭星星十为游戏添加音效项目源码分享

    一个游戏,声音也是非常的重要,其实cocos2dx里面的简单音效引擎的使用是非常简单的。我这里只不过是用一个类对所有的音效进行管理罢了。Audio.hAudio.cpp好了,本系列教程到此结束,第一次写教程如有不对请见谅或指教,谢谢大家。最后附上整个项目的源代码点击打开链接

  9. 03 Helloworld

    程序都有一个入口点,在C++就是main函数了,打开main.cpp,代码如下:123456789101112131415161718#include"main.h"#include"AppDelegate.h"#include"cocos2d.h"USING_NS_CC;intAPIENTRY_tWinMain{UNREFERENCED_ParaMETER;UNREFERENCED_ParaMETER;//createtheapplicationinstanceAppDelegateapp;return

  10. MenuItemImage*图标菜单创建注意事项

    学习cocos2dx,看的是cocos2d-x3.x手游开发实例详解,这本书错误一大把,本着探索求知勇于发现错误改正错误的精神,我跟着书上的例子一起调试,当学习到场景切换这个小节的时候,出了个错误,卡了我好几个小时。

返回
顶部