반응형


로그인과 같은 기능을 추가할 때 EditBox를 사용하는데 

안드로이드는 Back키가 있어 키보드를 내릴 수 있지만 iOS는 키보드를 내릴 방법이 없습니다.

간혹 오픈되어 있는 앱들을 설치하여 사용할 때도 iOS같은 경우 키보드를 내리지 못해 다음 단계로 

넘어가지 못한 다던가 그러한 문제가 발생하여 유저들로 부터 깊은 빡침을 받게 합니다.


유저들은 이런거 못참습니다. 

바로 삭제 해버리죠 ^^


스토어에 삭제 수가 점점 늘어 나길래 원인 분석을 하다보니 이와 같은 문제가 있다고 판단하여 

강제로 키보드를 내리는 방법을 구글링으로 찾아 보았으나 좋은 방법을 찾진 못했습니다.

그래서 엔진 쪽을 살펴 보다보니 좋은 방법이 떠올라 글 남깁니다.


엔진 쪽을 자세히 보니 ui::EditBox를 살펴보니 키보드를 활성화 시키는 방법은 있었습니다.

UIEditBox.cpp 파일을 보면 다음과 같은 부분이 있습니다.


1
2
3
4
5
6
7
void EditBox::touchDownAction(Ref *sender, TouchEventType controlEvent)
{
    if (controlEvent == Widget::TouchEventType::ENDED) {
        _editBoxImpl->openKeyboard();
    }
}
 
cs


touchDownAction에 EventType을 ENDED를 주면 키보드를 강제 활성화 시킵니다.

사용법은 아래와 같이 touchDownAction 함수를 호출해주면 됩니다.

1
m_EditBox->touchDownAction(m_EditBox, cocos2d::ui::Widget::TouchEventType::ENDED);
cs
< Keyboard Open >


하지만 아무리 찾아 봐도 키보드를 Close하는 부분은 빠져 있습니다.
cocos2d쪽에서 다른 문제가 생길 수 있어 해놓지 않은 것 인지 
아직 이런 문제를 파악하지 못해 수정을 안한 것인지...
버전업이 되다 보면 알 수 있겠내요. ^^


그래서 키보드를 Close하는 부분을 소스에 간단하게 추가해봤습니다.
1
2
3
4
5
6
7
8
void EditBox::touchDownAction(Ref *sender, TouchEventType controlEvent)
{
    if (controlEvent == Widget::TouchEventType::ENDED) {
        _editBoxImpl->openKeyboard();
    } else if (controlEvent == Widget::TouchEventType::CANCELED) {
        _editBoxImpl->closeKeyboard();
    }
}
cs

EventType을 CANCELED로 주면 키보드를 강제로 비활성화 하도록 수정했습니다.


touchDownAction를 호출할 때 Event Type을 CANCELED로 주면 키보드가 Close 됩니다.


1
m_EditBox->touchDownAction(m_EditBox, cocos2d::ui::Widget::TouchEventType::CANCELED);
cs

< Keyboard Close >



엔진을 수정하여 사용하게 되면 나중에 어떤 문제가 생기거나 엔진 버전 업이 될 경우 손이 많이 가게 됩니다.

수정한 부분을 간혹 잊어 버리고 엔진을 덮어 써버릴 경우 백업을 하지 않았다면 소스가 날아가 버립니다. ㅠ

하지만 이런 어쩔수 없는 상황에서는 수정해서 사용할 수 밖에 없습니다.



반응형

+ Recent posts