scaleform.minarto.com

한글 입력 글자 제한 이슈 0 본문

Scaleform

한글 입력 글자 제한 이슈 0

미나토 2012. 5. 23. 12:43


사실 가장 큰 이슈인 폰트 가독성에 관한 얘기를 할까도 했지만, 저작권이나 여러가지 얽혀있는 문제가 많아서 그건 다음 기회에 하기로 하고요...


이 이슈는  크게 두가지 입니다.



1. 글자수 바이트 제한


한글이 2Byte 이기에 발생하는 문제죠...

이건 머 별 어려움이 없습니다.

charCodeAt 만 잘 이용해 한글인지 영문인지만 판단하면 되니, 몇줄 안되는 코드로 해결하는건 일도 아니고요...




2. 제한 글자수 이상 입력시 화면에 표시되는 문제


이런겁니다

txt.maxChars = 3;


이렇게 세글자로 제한하면 영문은 딱 세글자만 잘 써지는데, 한글은 그 다음의 글자가 써지는 것은 아니지만 조합중의 글자가 보입니다. 결국 유저가 보기에는 써지는 것이죠...


자, 이걸 어떻게든 해결해달라고 한다면 해결해야겠지만 이게 좀 어렵다면 어렵습니다.

이게 스케일폼의 버그 아닌 버그이기 때문입니다.


플래시 또한 마찬가지이고 그러한 스펙이라고 봐야하거든요...

플래시의 스펙을 그대로 따라간 것이죠...



자, 입력을 제한해야 한다는 것... 이게 어렵습니다. 언어적인 것이라기 보다 vm 의 시스템에서 알아서 처리하는 부분이 있기 때문이죠...




3. preventDefault


os를 고려하지 않고 생각해보면 글자입력이란건 이렇습니다.


키보드 타이핑 > vm 에서 입력 받음 > 들어온 값을 텍스트 필드에 디스플레이...


그런데 우리는,


stage.addEventListener(KeyboardEvent.Key_DOWN, f);

function f(e:KeyboardEvent):void{

TextField.text = 입력값

}


이런 식으로 코드를 짠 적이 없습니다. 결국 vm에서 알아서 처리해버린다는 의미죠...


이걸 막아야 하겠죠...


그럼 이걸 막을 수 있느냐... 하는 문제가 생깁니다. 


사람들이 잘 안쓰는 메소드지만 이걸 막을 수 있는 방법이 있습니다. 제목에 언급했듯이 preventDefault 메소드를 사용하는 방법입니다.


뭐 이런식입니다.


txt.addEventListener(TextEvent.INPUT, f);

function f(e: TextEvent ):void{

e.preventDefault();

}


이러면 텍스트 필드에 텍스트 입력이 안됩니다.


자, 해결했습니다~~~ 끝!!!



하면 좋겠지만... 이 또한 영문에서만 가능하고 한글은 여전히 조합글자가 화면에 표시됩니다.


우리에게 남은 방법은 없는걸까요??



다음 포스팅으로 넘어갑니다.