關於cocos2dx的textfield事件響應


time:2015/08/27

1. textfiled

  cocostudio的輸入框,看源代碼知道他是直接繼承widget的,但是真正的輸入框功能是label實現的,是Textfield類的一個成員變量

2. addEventListener

  注冊函數對應的四個事件類型

(1)attach_with_ime

  焦點進入

(2)detach_with_ime

  焦點離開

(3)insert_text

  輸入文字

(4)delete_backward

  輸出文字

3. 事件觸發機制

(1)touch:包括attach和detach

bool TextField::onTouchBegan(Touch *touch, Event *unusedEvent)
{
    bool pass = Widget::onTouchBegan(touch, unusedEvent);
    if (_hitted)
    {
        _textFieldRenderer->attachWithIME();
    } else {
        this->didNotSelectSelf();
    }
    return pass;
}

* 點擊輸入框其實就是觸摸事件,然后判斷當前焦點狀態,做出進入還是離開的事件觸發
(2)insert和delete

void TextFieldTTF::insertText(const char * text, size_t len);
void TextFieldTTF::deleteBackward();

* 直接從glfw觸發調用到這兩個函數

(3)流程圖

(4)問題

*描述: attach響應之后detach也會響應一次

*解決:修改update函數,參考cocos2dx-3.6

修改之前代碼:

void TextField::update(float dt)
{
    if (getAttachWithIME())
    {
        attachWithIMEEvent();
        setAttachWithIME(false);
    }
    if (getDetachWithIME())
    {
        detachWithIMEEvent();
        setDetachWithIME(false);
    }

修改之后的代碼:

void TextField::update(float dt)
{
    if (getDetachWithIME())
    {
        detachWithIMEEvent();
        setDetachWithIME(false);
    }
    
    if (getAttachWithIME())
    {
        attachWithIMEEvent();
        setAttachWithIME(false);
    }

 

4. 總結

(1)認識了TextFieldTTF的事件響應

(2)在此基礎上加光標等內容會更加得心應手


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM