cocos2dx3.0 UITextField不能使用退格键删除字符

手册/FAQ (212) 2016-04-19 09:31:55

 

   近日开始将项目移植到cocos2dx 3.0版本,出现了一些问题,UI方面目前就发现UITextField控件不能响应退格键或者删除键,在Windows下面调试如此,我开始以为是平台支持不好,后来发布到Android后也是如此。

        没办法只好跟踪了一下源码。Key操作主要的处理是在CCGLView类里面的GLView::onGLFWKeyCallback()。看了一下其他函数的处理,定位问题是没有通知IMEDispatcher。尝试在这个函数里面添加了几行代码:

  • if(GLFW_KEY_DELETE == key)    
  • {    
  •     IMEDispatcher::sharedDispatcher()->dispatchDeleteBackward();    
  • }  

       再测试的时候发现已经可以了。不过这样改比较苟且,代码不太优美。而且不知道cocos2dx官方这样设计的目的是什么。最后决定在AppDelegate里面添加监听然后再处理。具体代码如下:       

  • static void keyEventCallback(EventKeyboard::KeyCode code, Event *event)  
  • {  
  •     typedef EventKeyboard::KeyCode KeyCode;  
  •     switch(code)  
  •     {  
  •     case KeyCode::KEY_BACKSPACE:  
  • #if CC_TARGET_PLATFORM == CC_PLATFORM_WIN32  
  •         IMEDispatcher::sharedDispatcher()->dispatchDeleteBackward();  
  • #else  
  •         Director::getInstance()->end();  
  • #endif  
  •         break;  
  •     case KeyCode::KEY_DELETE:  
  •         IMEDispatcher::sharedDispatcher()->dispatchDeleteBackward();  
  •         break;  
  •     }  
  • }  

 

  • EventListenerKeyboard *listener = EventListenerKeyboard::create();  
  • listener->onKeyReleased = keyEventCallback;  
  • director->getEventDispatcher()->addEventListenerWithFixedPriority(listener, 1);  

        问题算是解决了。

THE END