• cocostudio3.10 已经帮我们做好了TextField控件,提供了触摸事件和一些常用API,已经不用向原来自己写一个TextFied了,但是还没有实现光标,下面我们在这个控件的基础上面来加入光标的功能。

CursorTextField .h

#ifndef CursorTextField_h
#define CursorTextField_h
#include"cocos2d.h"
#include"cocostudio/CocoStudio.h"
#include"ui/CocosGUI.h"using namespace cocos2d;
using namespace ui;
using namespace cocostudio;class CursorTextField :public Node
{
public:CursorTextField();static Node* createWithTextField(TextField *text,const std::string &TTFpath,int fontSize);//static Node* createWithTextField(TextField *text);bool init(TextField *text, const std::string &TTFpath, int fontSize);void initTextField(TextField *text, const std::string &TTFpath, int fontSize);void purge();void addCursorSprite();void textFiledEvent(Ref *pSender, TextField::EventType type);int getContentWidth();
public:TextField* m_textField;std::string m_ttfPath;int m_FontSize;Sprite* m_cursorSprite;Action* m_cursorAction;
};
#endif

CursorTextField .cpp

#include"CursorTextField.h"
CursorTextField::CursorTextField()
{m_textField = NULL;m_cursorSprite = NULL;m_cursorAction = NULL;
}Node* CursorTextField::createWithTextField(TextField *text, const std::string &TTFpath, int fontSize)
{auto ref = new CursorTextField;if (ref &&ref->init(text, TTFpath, fontSize)){ref->autorelease();}else CC_SAFE_DELETE(ref);return ref;
}
bool CursorTextField::init(TextField *text, const std::string &TTFpath, int fontSize)
{initTextField(text, TTFpath, fontSize);addCursorSprite();m_textField->addEventListener(CC_CALLBACK_2(CursorTextField::textFiledEvent,this));return true;
}
void CursorTextField::initTextField(TextField *text, const std::string &TTFpath, int fontSize)
{m_textField = text;m_ttfPath = TTFpath;m_FontSize = fontSize;
}int CursorTextField::getContentWidth()
{auto label = Label::createWithTTF(m_textField->getString(), m_ttfPath, m_FontSize);auto width = label->getContentSize().width;return m_textField->getPosition().x+width;
}
void CursorTextField::textFiledEvent(Ref *pSender, TextField::EventType type)
{switch (type){case TextField::EventType::ATTACH_WITH_IME:{m_cursorSprite->setVisible(true);m_cursorSprite->setPositionX(getContentWidth());break;}case TextField::EventType::DETACH_WITH_IME:m_cursorSprite->setVisible(false);break;case TextField::EventType::INSERT_TEXT:{m_cursorSprite->setVisible(true);m_cursorSprite->setPositionX(getContentWidth());break;}case TextField::EventType::DELETE_BACKWARD:{m_cursorSprite->setVisible(true);m_cursorSprite->setPositionX(getContentWidth());break;}default:break;}
}
void CursorTextField::addCursorSprite()
{int column = 2;int height = 20;int pData[50][2];for (int i = 0; i < height; i++){for (int j = 0; j < column; j++){pData[i][j] = 0xffffffff;}}Texture2D* texture = new Texture2D();//指针,指针长度,像素类型,像素宽度,高度,内容大小texture->initWithData(pData, 20, Texture2D::PixelFormat::RGB888, 1, m_textField->getFontSize(),CCSizeMake(column, height));m_cursorSprite = Sprite::createWithTexture(texture);m_cursorSprite->setPositionY(m_textField->Node::getPositionY()+2);texture->autorelease();addChild(m_cursorSprite);m_cursorSprite->setVisible(false);m_cursorAction = RepeatForever::create(Sequence::create(FadeOut::create(0.7f), FadeIn::create(0.7f),NULL));m_cursorSprite->runAction(m_cursorAction);
}

使用:

//m_TextUsername是从Csb中得到的TextField控件。
//记住: 一定要将cocostudio中的TextField的字体大小和
//字体样式的设置和程序当中的label一样。我的代码已经处理过
//大家可以直接不管,直接使用。只是想提醒下这个细节。
m_TextUsernameField= CursorTextField::createWithTextField(m_TextUsername, "fonts/kaiti.ttf", m_TextUsername->getFontSize());addChild(m_TextUsernameField);

效果图

cocostudio的TextField空件实现光标。相关推荐

  1. vb6中使text控件的光标随着增加的内容向下移动

    vb6中使text控件的光标随着增加的内容向下移动 Dim i As Integer Private Sub Command1_Click() Text1.Text = Text1.Text + &q ...

  2. 关于cocostudio动态添加控件触摸响应无效的学习

    time:2015/04/19 1. 描述 * 把studio制作的ui加载之后,动态添加事件(比如说,单点触摸),结果回调函数(eg:onTouchBegan等)根本没有响应! * 另外,网上有朋友 ...

  3. c 语言如何隐藏光标,如何隐藏C#中textBox控件的光标

    怎么隐藏C#中textBox控件的光标 using System.Runtime.InteropServices; -- [DllImport("user32", EntryPoi ...

  4. 远程桌面服务ActiveX空件(mstscax.dll)跟客服端外壳的版本不相配

    远程桌面服务ActiveX空件(mstscax.dll)跟客服端外壳的版本不相配 浏览器重置好了

  5. QML自定义TextField控件

    QML中QtQuick提供的文本编辑框控件包括 TextInput,TextField,TextEdit,TextArea.Textlnput 与 TextField 为行编辑控件,TextEdit ...

  6. jasper 中textfield控件的Markup属性用法

    markup属性主要分为4个属性 none:不做任何处理,当作普通字符串展示 styled:样式化标记文本,系统会使用jasperreport的样式化标记文本的进行渲染 html:使用html标记语言 ...

  7. MFC隐藏EditControl控件的光标

    1.解决思路:给控件添加事件处理程序,一旦出现显示光标这个事件,立刻使用HideCaret函数处理掉. 2.具体步骤: (1)右键控件,选择添加事件处理程序. (2)类列表选择主类,消息类型选择EN_ ...

  8. Android --- 怎么设置 EditText 控件中光标默认位置,当 EditText 里有文字的时候,光标跑到了最前面

    问题描述 今天写 Android 项目的时候遇到这样一个问题,当我进入一个修改页面的时候,发现 EditText 下的光标在文字的最前面,这样给用户的体验感非常不好,所以用以下方法解决,简单明了. 解 ...

  9. IOS实现点击软键盘的Next/Return按钮或者空白处后自动隐藏键盘

    在开发IOS过程中,经常需要用到TextField控件.光标一旦定位到该控件,软键盘就会自动开启,用户能够在其中通过软键盘进行输入.但是,若不对软键盘进行其他操作,它是不会自动关闭的.这样就很有可能降 ...

  10. Unity3D TextField 和 PasswordField控件(文本框)

    TextField控件 TextField控件主要用于监听用户输入的信息,使用GUI.TextField()方法显示输入框,该方法的返回值为用户输入的字符串信息. 常见形式: GUI.TextFiel ...

最新文章

  1. 破解Win2008口令-ERD6.0
  2. 密码学中经典算法及应用
  3. hadoop hive hbase 集群搭建
  4. 2年Java面试提问总结
  5. 前端学习(1849)vue之电商管理系统电商系统前端项目初始化
  6. python 循环内部添加多个条件判断会出现越界
  7. 正则表达式 正整数_史上最全的正则表达式 (1) -- 校验数字的表达式
  8. 服务器网卡的Teaming技术
  9. AcWing 900. 整数划分(完全背包计数问题)
  10. PowerPhotos:Mac照片库管理软件
  11. 整理下OSS方面的资料,免得到处找,linux音频编程,open sound system
  12. 隐藏输入法图标的方法
  13. Vant删除图片Vue版本
  14. dsp调音一次多少钱_dsp价格一般多少
  15. Inventor冲压加强筋_Inventor教程:创建加强筋
  16. python输入hello*3_Python快速上手: hello world
  17. 现在是经济的寒冬吗?
  18. 【恋恋不忘你xp主题】_8.4
  19. onload、onunload、onbeforeunload的区别
  20. 珠海中级Java招聘 薪资16-20k

热门文章

  1. iso硬盘安装 凤凰os_X86平台国产OS 对比评测 | 凤凰os安装教程_什么值得买
  2. oracle练习之查询1(where等)
  3. Ubuntu 安装JDK18
  4. 办公、学习不得不收藏的十个网站,有了它效率至少提升十倍
  5. 全国计算机二级c题库在线,全国计算机二级c语言考试题库
  6. 小甲鱼零基础入门学习python笔记
  7. 设置eclipse主题
  8. Python输出语句
  9. 【数据集】Python爬取某国内所有航班记录
  10. python函数手册(1)