2011-01-03 6 views
0

형식을 제거하지 않고 여러 textformats가있는 텍스트 필드 (줄 바꿈 포함)에서 마지막 문자를 제거하고 싶습니다.textformat을 파괴하지 않고 텍스트 필드에서 마지막 문자 제거

지금까지 내가 가지고 :

textfield.replaceText(textField.length-1,textField.length-1,''); 

내가이 줄 바꿈을 제거하고 매우 느린하지 않는 생각, 내 textformats을 파괴하는 것 같다.

나 :

textfield.text = textfield.text.slice(0,-1); 

이 빠른 그러나뿐만 아니라 모든 textformats을 제거합니다.

+0

WOA,을 downvoted되고 2 년 후 ... 무엇을 주는가? – eldamar

답변

1

그것은 조금 지루하지만, 당신은 당신이 스타일 시트 텍스트를 포맷하지 않더라도, 텍스트 필드의 htmlText -property를 사용할 수 있습니다 플래시는 모든 형식의 정보를 변환합니다

textField.text = "A test."; 
trace (textField.htmlText); 

실제로 반환합니다 : HTML 텍스트로 내부적으로, 당신은 textField.text 설정 순간에도, 당신은 여전히 ​​작업을위한 XML 형식의 텍스트를 얻을 수 있습니다

<P ALIGN="LEFT"><FONT FACE="Times Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">A test.</FONT></P> 

setTextFormat()을 사용하여 변경 한 내용을 반영하여 태그는 항상 <FONT> 개의 태그 내에 표시됩니다. 당신은, 그러므로,이 라인에 포함 된 XML을 반복하고, 마지막 TextNode에 마지막 문자를 제거 할 수 있습니다

private function removeLastCharacter (textField:TextField) : void { 
    var xml:XML = new XML (textField.htmlText); 
    for (var i : int = xml.children().length()-1; i >= 0; i--){ 
     var node:XML = xml.children()[i]; 
     if (node.name() == "FONT") { 
      var tx:String = node.text()[0].toString(); 
      node.setChildren (tx.substr (0, tx.length-1)); 
      break; 
     } 
    } 
    textField.htmlText = xml; 
    trace (textField.text); // In the above example, output will be: "A test"; 
} 
+0

이것은 실제로 작동 할 수있다, 나는 그것이 나의 문제 tho를 위해 진짜로 느릴다는 것을 용인한다. 오버플로가되지 않도록 텍스트 필드 안에 텍스트를 포함해야합니다. 현재 해결책은 텍스트 필드가 컨테이너보다 큰 반면 마지막 문자를 제거하는 것입니다. 마비 나는 다른 방법으로이 문제를 해결할 수있다. 이제 텍스트 필드 클래스의 폰트 크기 제한 인 127에 대한 새로운 문제에 직면했으며 TLF로 전환해야 할 수도 있습니다. 이것은 진짜 악몽으로 밝혀졌습니다 ... – eldamar

+0

그것은 아주 천천히 진행되지 않을 것입니다. XML 변환은 어쨌든 Flash에 의해 수행됩니다. TextField를 크기 조절하여 크기 제한을 해결할 수 있습니다. 예를 들어 128의 글꼴 크기는 두 번째 글꼴 크기 인 64입니다. 동일한 글꼴 구문 분석 메커니즘을 사용하여 모든 글꼴 크기에 배율 인수를 곱하면 모든 127보다 작 으면 여전히 동일하게 보일 것입니다. – weltraumpirat

+0

죄송합니다. 귀하의 의견을 다시 읽었습니다 ... getCharIndexAtPoint를 사용하지 않는 이유는 무엇입니까? – weltraumpirat

1

고객님의 문제를 올바르게 이해하시기 바랍니다. htmlText에서 서식을 유지하면 가능한 해결책이 하나 있습니다.

형식 텍스트를 XML 형식으로 유지하고 XML을 수정하는 것이 좋습니다. XML은 포맷팅을 그대로 유지할 것이며, 문자열 곡예사를 유지할 필요가 없습니다. 단점은 물론 서식 지정 XML을 유효하게 유지해야하는 것과 추가 변수를 가져야한다는 것입니다. 여기

은 예입니다 :

var tf:TextField = new TextField(); 
var t:XML = new XML("<html><p>lalala</p><font color='#ff0000'> lol</font></html>"); 
tf.htmlText = t.toXMLString(); 
t.font[0] = t.font[0].text().slice(0, -1); 
tf.htmlText = t.toXMLString(); 
addChild(tf); 
+0

고마워요.하지만이 프로젝트에 htmlText를 사용하고 있지 않습니다. 이것은 제 거대한 프로젝트에 큰 재 작성을 의미 할 것입니다. 텍스트 필드의 끝에있는 모든 문자 서식을 완전히 제거하지 않고 텍스트 문자열의 끝에 문자 (또는 줄 바꿈)를 제거 할 수 있도록 간단한 솔루션을 찾고 있습니다. – eldamar

+0

여러 개의 텍스트 형식을 설정하는 방법을 확인하려면 더 많은 코드 스 니펫을 볼 수 있습니까? – Roy

+0

글쎄, 여기에 게시하는 것은 다소 복잡하지만 단락을 처리하는 XML, 확장 된 텍스트 필드 클래스 및 묶음 코드가 XML과 관련됩니다. 기본적으로 XML (동적으로 생성 된) 텍스트 필드에 대한 내 형식을 얻을 글꼴, 크기, 선도, 색상 (cmyk, rgb, pms 등 여러 색상에 대한 지원) 색 변경을위한 controlls 무리가 있습니다. 필자는 텍스트 서식 클래스를 xml로 변환하여 내 설정을 저장합니다. 나는 "단락 스타일"을 저장하기 위해 동일한 방법을 사용한다. 이 짧은 인스턴트 메신저를 인쇄물 전용의 단어 형 응용 프로그램으로 만들기. – eldamar