Текстовое поле AS3 не может выбрать цвет с помощью ColorPicker только для выбранного текста

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

Во всех примерах редактирования текста показано изменение цвета всего текстового поля. Это не совсем то, что я хочу.

Любая помощь/понимание будет оценена по достоинству.


person Cam    schedule 06.09.2011    source источник


Ответы (1)


Выясните, что приводит к потере выбора вашего текстового поля (например, может ли это быть щелчок по компоненту выбора цвета?). Затем получите selectionBeginIndex и selectionEndIndex из текстового поля до того, как это произойдет, и сохраните их в постоянной (например, члене класса) переменной.

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

Краткий пример:

var beginIndex : uint;
var endIndex : uint;

function beforeFocusIsLost() : void {
    beginIndex = myTextField.selectionBeginIndex;
    endIndex = myTextField.selectionEndIndex;
}

function whenColorIsPicked() : void {
    var tf : TextFormat;

    tf = new TextFormat();
    tf.color = myColor;

    myTextField.setTextFormat(tf, beginIndex, endIndex);
}

Если вы хотите сохранить выделение, вы также можете сбросить его после установки цвета с помощью TextField.setSelection().

РЕДАКТИРОВАТЬ: обратите внимание, что если выбор просто скрыт, возможно, вам нужно просто TextField.alwaysShowSelection. Попробуйте установить значение true в текстовом поле, и все вышеперечисленное может оказаться излишним.

myTextField.alwaysShowSelection = true;
person richardolsson    schedule 06.09.2011
comment
Хорошо, это работает. И это то направление, в котором я двигался. Мне нужно, чтобы в текстовом поле по-прежнему был выбран тот же текст. Я считаю, что ColorPicker фокусируется, и поэтому текст TextField больше не выделяется. Итак, сейчас я тестирую вызов TextField.setSelection() для ColorPicker.open() и close(). Мысли? - person Cam; 07.09.2011
comment
Да, кажется, есть смысл. Если выбор на самом деле не потерян, а только скрыт, вы можете просто использовать myTextField.alwaysShowSelection = true; - person richardolsson; 07.09.2011