zoukankan      html  css  js  c++  java
  • cocos代码研究(21)Widget子类TextField学习笔记

    基础理论

    一个接受用户输入的widget。 输入文本的渲染基于TextFieldTTF。 如果你想用系统控制行为,请使用EditBox来替代。继承自 Widget。

    代码实践

    //与占位符有关
    void setPlaceHolder (const std::string &value)
    设置占位符。

    const std::string & getPlaceHolder () const
    获取占位符。

    const Color4B & getPlaceHolderColor () const
    请求占位符使用颜色。

    void setPlaceHolderColor (const Color3B &color)
    改变占位符颜色。

    void setPlaceHolderColor (const Color4B &color)
    改变占位符颜色。

    //和文字有关
    void setText (const std::string &text)
    改变文本内容。

    const std::string & getStringValue () const
    请求获取文本内容。

    void setString (const std::string &text)
    改变文本内容。

    const std::string & getString () const
    请求获取文本内容。

    const Color4B & getTextColor () const
    请求文本颜色。

    void setTextColor (const Color4B &textColor)
    改变文本颜色。

    void setFontSize (int size)
    改变字体大小。

    int getFontSize () const
    请求获取字体大小。

    void setFontName (const std::string &name)
    改变字体名称。

    const std::string & getFontName () const
    请求获取字体名称。

    virtual void didNotSelectSelf ()
    取消关联输入法编辑器。

    void setMaxLengthEnabled (bool enable)
    开关最大长度限制。

    bool isMaxLengthEnabled () const
    请求是否开启了最大长度限制。

    void setMaxLength (int length)
    改变最大输入长度限制。

    int getMaxLength () const
    请求最大输入长度。

    int getStringLength () const
    请求输入字符串长度。

    //与触摸事件有关
    void setTouchSize (const Size &size)
    设置触摸区域大小。 触摸大小用于hitTest。

    Size getTouchSize () const
    获取当前的触摸区域大小。

    void setTouchAreaEnabled (bool enable)
    启用或关闭触摸区域。

    virtual bool hitTest (const Vec2 &pt, const Camera *camera, Vec3 *p) const override
    检查一个点是否在控件的内容空间里。 这个函数是用于检测控件的触摸响应区域。

    virtual bool onTouchBegan (Touch *touch, Event *unusedEvent) override
    触摸事件开始时的回调函数。

    //与输入模式有关
    void setPasswordEnabled (bool enable)
    开关密码输入模式。

    bool isPasswordEnabled () const
    请求密码输入模式是否开启。

    void setPasswordStyleText (const char *styleText)
    改变密码模式下的文本样式。

    const char * getPasswordStyleText () const
    请求密码模式的文本样式。

    bool getInsertText () const
    是否开启插入文本模式。

    void setInsertText (bool insertText)
    开关插入文本模式。

    bool getDeleteBackward () const
    是否允许回删。

    void setDeleteBackward (bool deleteBackward)
    开关回删模式。

    //位置大小和对齐模式有关
    virtual Size getAutoRenderSize ()
    获取渲染时的大小。

    void setTextAreaSize (const Size &size)
    改变文本区域大小。

    void setTextHorizontalAlignment (TextHAlignment alignment)
    改变文本水平对齐类型。

    TextHAlignment getTextHorizontalAlignment () const
    获取水平对齐类型。

    void setTextVerticalAlignment (TextVAlignment alignment)
    改变文本垂直对齐类型。

    TextVAlignment getTextVerticalAlignment () const
    获取文本垂直对齐类型。

    void addEventListenerTextField (Ref *target, SEL_TextFieldEvent selecor)
    添加一个监听器,当一些预定义事件发生时进行回调操作。

    void addEventListener (const ccTextFieldCallback &callback)
    添加一个监听器,当一些预定义事件发生时进行回调操作。

    实例:

            // Create the textfield
            TextField* textField = TextField::create("input words here","fonts/Marker Felt.ttf",30);
            textField->ignoreContentAdaptWithSize(false);
            ((Label*)(textField->getVirtualRenderer()))->setLineBreakWithoutSpace(true);
            textField->setContentSize(Size(240, 170));
            textField->setString("input words here");
            textField->setTextHorizontalAlignment(TextHAlignment::CENTER);
            textField->setTextVerticalAlignment(TextVAlignment::CENTER);
            textField->setPosition(Vec2(widgetSize.width / 2.0f, widgetSize.height / 2.0f));
            textField->addEventListener(CC_CALLBACK_2(UITextFieldTest_LineWrap::textFieldEvent, this));
            _uiLayer->addChild(textField);
    void UITextFieldTest_LineWrap::textFieldEvent(Ref *pSender, TextField::EventType type)
    {
        switch (type)
        {
            case TextField::EventType::ATTACH_WITH_IME:
            {
                TextField* textField = dynamic_cast<TextField*>(pSender);
                Size widgetSize = _widget->getContentSize();
                textField->runAction(MoveTo::create(0.225f,
                                                      Vec2(widgetSize.width / 2.0f, widgetSize.height / 2.0f + 30)));
                textField->setTextHorizontalAlignment(TextHAlignment::LEFT);
                textField->setTextVerticalAlignment(TextVAlignment::TOP);
                
                _displayValueLabel->setString(StringUtils::format("attach with IME"));
            }
                break;
                
            case TextField::EventType::DETACH_WITH_IME:
            {
                TextField* textField = dynamic_cast<TextField*>(pSender);
                Size widgetSize = _widget->getContentSize();
                textField->runAction(MoveTo::create(0.175f, Vec2(widgetSize.width / 2.0f, widgetSize.height / 2.0f)));
                textField->setTextHorizontalAlignment(TextHAlignment::CENTER);
                textField->setTextVerticalAlignment(TextVAlignment::CENTER);
                
                _displayValueLabel->setString(StringUtils::format("detach with IME"));
            }
                break;
                
            case TextField::EventType::INSERT_TEXT:
                _displayValueLabel->setString(StringUtils::format("insert words"));
                break;
                
            case TextField::EventType::DELETE_BACKWARD:
                _displayValueLabel->setString(StringUtils::format("delete word"));
                break;
                
            default:
                break;
        }
    }
  • 相关阅读:
    (元)黄公望---富春山居图(中国十大传世名画之八) 高清图下载
    Bloom Filter 原理与应用
    开始我的 JNI 入门吧
    javaScript的使用
    hash定义
    POJ3169 Layout(差分约束系统)
    青蛙的约会
    POJ 3414 Pots ( BFS , 打印路径 )
    你真的理解Java的this和super吗?
    十款优秀的在线JavaScript工具介绍
  • 原文地址:https://www.cnblogs.com/damowang/p/4862203.html
Copyright © 2011-2022 走看看