Удаление последнего символа из текстового поля без уничтожения текстового формата - PullRequest
0 голосов
/ 03 января 2011

У меня проблема, когда я хочу удалить последний символ из текстового поля (включая разрывы строк), в котором есть несколько текстовых форматов, без удаления форматов.

пока у меня есть:

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

Я полагаю, что это не удаляет разрывы строк и очень медленно, кажется, разрушает мои текстовые форматы.

или:

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

это быстрее, но также удаляет все текстовые форматы.

Ответы [ 2 ]

1 голос
/ 03 января 2011

Это немного утомительно, но вы можете использовать htmlText -объект TextField, даже если вы не форматируете свой текст с помощью StyleSheets: Flash преобразует всю вашу информацию о форматировании в текст HTML внутри, поэтому даже если вы установили textField.text, вы все равно можете получить отформатированный текст xml для работы:

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

на самом деле вернет:

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

Текст всегда будет отображаться в тегах <FONT>, отражая изменения, которые вы внесли с помощью setTextFormat(). Таким образом, вы можете перебрать 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";
}
1 голос
/ 03 января 2011

Надеюсь, я правильно понимаю вашу проблему.Если вы сохраните форматирование в 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...