해결책 : 내부 TextField 객체에 접근해 커스텀 이벤트 핸들러를 추가하고, 특정 조건에 따라 초성을 강제 삭제하도록 한다.
이 문제는 꽤나 중요한 문제로 AIR 1.0 버전에서는 없던 문제이다.
나는 이 문제에 대해 어도비사에 공식적으로 버그 리포팅을 한 적이 있고,
나뿐 아니라, 이희덕님이나 다른 여러 한국 개발자들도 이 문제에 대한 버그 수정을
어도비에 요구한 것으로 알고 있다.
그런데, 방금 전에 플렉스로 잠깐 코딩을 해 보니,
이 문제는 의외로 간단하게 해결할 수 있다.
TextInput과 같은 컨트롤 내부에 있는 텍스트 필드에 접근해
이벤트 리스너를 추가하고, 특정 조건에 따라
초성을 제거하면 되기 때문이다.
이 때 특정 조건은 다음과 같다.
1. keyUp 이벤트가 일어날 때마다 이전 문자열을 전역 변수에 저장해 놓는다.
2. 백스페이스를 누른 상태에서 현재 텍스트필드의 텍스트와 이전 텍스트가 같은지
확인한다. 이 때 혹시 뒤에 공백이 있을 수 있으므로, 공백을 제거한 문자열을 비교한다.
3. 만일 두 텍스트가 같다면, 이것 참 이상한 일이다. 어떻게 두 문자가 같을 수 있을까? 분명히 백스페이스를 눌렀는데 말이다!!!
4. 이런 경우는 백 스페이를 누른 위치를 기준으로 앞의 문자열과 뒤의 문자열을 잘라 새로운 텍스트를 텍스트 필드의 텍스트로 집어 넣는다. 이렇게 하는 이유는, 꼭 마지막 글자에서 백스페이스를 눌러서 글자를 지우지 않더라도, 글자 중간에 커서를 이동해 글자 중간부터 쓰다가 다시 글자 중간부터 지울 경우도 대비하기 위해서이다.
5. 이제 버그 없는 텍스트 인풋 컨트롤을 맘껏 사용한다.
물론 실제로 현업에서는 이렇게 애플리케이션 단에서 코딩을 하면 안된다.
방법은 두 가지가 있을 수 있는데,
하나는 TextInput이나 TextArea를 상속해 이 클래스에 위와 같은 로직을
추가하는 방식이고,
다른 하나는 유틸리티 클래스를 만들어서 TextInput 등의 컨트롤을 입력받아
이런 로직을 처리하도록 하는 방식이다.
두 방식 중 어떤 것을 사용해도 상관은 없겠지만,
기왕이면 전자의 방식이 보다 OOP 설계에 맞다고 할 수 있다.





