cocos代码研究(13)Widget子类EditBox学习笔记
理论基础
一个用来输入文本的类,继承自 Widget , 以及 IMEDelegate。
代码部分
Public枚举类型
enum KeyboardReturnType
键盘的返回键类型。
enum InputMode {
ANY, EMAIL_ADDRESS, NUMERIC, PHONE_NUMBER,
URL, DECIMAL, SINGLE_LINE
}
枚举值 | |
---|---|
ANY |
用户可以输入任何文本,包括换行符。 |
EMAIL_ADDRESS |
允许用户输入一个电子邮件地址。 |
NUMERIC |
允许用户输入一个整数值。 |
PHONE_NUMBER |
允许用户输入一个电话号码。 |
URL |
允许用户输入一个URL。 |
DECIMAL |
允许用户输入一个实数 通过允许一个小数点扩展了kEditBoxInputModeNumeric模式 |
SINGLE_LINE |
除了换行符以外,用户可以输入任何文本, |
EditBox::InputMode定义了可以输入的文本类型。
enum InputFlag {
PASSWORD, SENSITIVE, INITIAL_CAPS_WORD, INITIAL_CAPS_SENTENCE,
INTIAL_CAPS_ALL_CHARACTERS
}
枚举值 | |
---|---|
PASSWORD |
表明输入的文本是保密的数据,任何时候都应该隐藏起来 它隐含了EDIT_BOX_INPUT_FLAG_SENSITIVE |
SENSITIVE |
表明输入的文本是敏感数据, 它禁止存储到字典或表里面,也不能用来自动补全和提示用户输入。 一个信用卡号码就是一个敏感数据的例子。 |
INITIAL_CAPS_WORD |
这个标志的作用是设置一个提示,在文本编辑的时候,是否把每一个单词的首字母大写。 |
INITIAL_CAPS_SENTENCE |
这个标志的作用是设置一个提示,在文本编辑,是否每个句子的首字母大写。 |
INTIAL_CAPS_ALL_CHARACTERS |
自动把输入的所有字符大写。 |
EditBox::InputFlag定义如何显示和格式化输入文本。
创建一个固定大小的编辑框
static EditBox * create (const Size &size, //编辑框的大小。
Scale9Sprite *normalSprite,
Scale9Sprite *pressedSprite=nullptr,
Scale9Sprite *disabledSprite=nullptr)
创建一个固定大小的编辑框。
static EditBox * create (const Size &size, //编辑框的大小。
const std::string &normal9SpriteBg, //编辑框的背景图片名字。
TextureResType texType=TextureResType::LOCAL)
void setInputMode (InputMode inputMode)
设置编辑框的输入模式。
void setInputFlag (InputFlag inputFlag)
设置编辑框的输入标识,这个标识是EditBox::InputFlag类型
void setMaxLength (int maxLength)
设置编辑框允许输入的最大长度。 设置这个值默认允许多行输入 可以在Android,iOS和Windows Phone平台使用
int getMaxLength ()
获取编辑框的最大输入长度。
//与文字有关
void setText (const char *pText)
设置编辑框中输入的文本。
const char *getText (void)
获取编辑框中输入的文本。
void setFont (const char *pFontName, int fontSize)
设置编辑框的字体。仅支持系统字体
void setFontName (const char *pFontName)
设置字体的名字。仅支持系统字体
void setFontSize (int fontSize)
设置字体大小。
void setFontColor (const Color3B &color)
设置编辑框的文本字体颜色。
//与占位符有关
void setPlaceholderFont (const char *pFontName, int fontSize)
设置占位符的字体。仅支持系统字体
void setPlaceholderFontName (const char *pFontName)
设置占位符的字体名称。仅支持系统字体
void setPlaceholderFontSize (int fontSize)
设置占位符的字体大小。
void setPlaceholderFontColor (const Color3B &color)
当编辑框为空的时候,设置占位符文本字体颜色,
void setPlaceholderFontColor (const Color4B &color)
当编辑框为空的时候,设置占位符文本字体颜色
void setPlaceHolder (const char *pText)
当编辑框为空的时候,设置编辑框中的占位符文本
const char *getPlaceHolder (void)
当编辑框为空的时候,获取编辑框中的占位符文本
void setDelegate (EditBoxDelegate *delegate)
设置编辑框控件的代理类
void registerScriptEditBoxHandler (int handler)
注册一个脚本函数,当编辑框发出事件时,这个脚本函数会被调用
void unregisterScriptEditBoxHandler (void)
注销已注册的编辑框事件监听脚本函数
int getScriptEditBoxHandler (void)
获取一个脚本函数句柄
void setReturnType (EditBox::KeyboardReturnType returnType)
设置编辑框的键盘的Return类型,这个类型的取值为EditBox::KeyboardReturnType常量之一
virtual voidonEnter (void) override
每次当Node进入“stage”时才调用事件回调。 如果Node进入“stage”状态时伴随着一个转换(transition),那么事件将会在这个转换开始的时候被调用。 在onEnter过程中,你不能够接入“sister/brother”兄妹节点。 如果你重写了onEnter方法,你应该调用它的父类,e.g., Node::onEnter().
virtual voidonExit (void) override
每次当Node离开“stage”时才调用事件回调。 如果Node离开“stage”状态时伴随着一个转换(transition), 那么事件将会在这个转换结束的时候被调用。 在onEnter过程中中你不能够接入一个兄妹节点。 如果你重写onExit, 你应该调用它的父类, e.g., Node::onExit().
实例:
// top std::string pNormalSprite = "extensions/green_edit.png"; _editName = ui::EditBox::create(editBoxSize, ui::Scale9Sprite::create(pNormalSprite)); _editName->setPosition(Vec2(visibleOrigin.x+visibleSize.width/2, visibleOrigin.y+visibleSize.height*3/4)); _editName->setFontColor(Color3B::RED); _editName->setPlaceHolder("Name:"); _editName->setPlaceholderFontColor(Color3B::WHITE); _editName->setMaxLength(8); _editName->setFontSize(editBoxSize.height/2); _editName->setText("v👐👊💝"); _editName->setReturnType(ui::EditBox::KeyboardReturnType::DONE); _editName->setDelegate(this); addChild(_editName); // middle _editPassword = ui::EditBox::create(editBoxSize, "extensions/orange_edit.png"); _editPassword->setPosition(Vec2(visibleOrigin.x+visibleSize.width/2, visibleOrigin.y+visibleSize.height/2)); _editPassword->setFontColor(Color3B::GREEN); _editPassword->setPlaceHolder("Password:"); _editPassword->setMaxLength(6); _editPassword->setInputFlag(ui::EditBox::InputFlag::PASSWORD); _editPassword->setInputMode(ui::EditBox::InputMode::SINGLE_LINE); _editPassword->setFontSize(editBoxSize.height/2); _editPassword->setDelegate(this); addChild(_editPassword); // bottom auto bottomButtonSize = Size(editBoxSize.width, editBoxSize.height + 10); _editEmail = ui::EditBox::create(bottomButtonSize, "extensions/yellow_edit.png"); _editEmail->setPosition(Vec2(visibleOrigin.x+visibleSize.width/2, visibleOrigin.y+visibleSize.height/4)); _editEmail->setPlaceHolder("Email:"); _editEmail->setInputMode(ui::EditBox::InputMode::EMAIL_ADDRESS); _editEmail->setDelegate(this); addChild(_editEmail);