AS3: невозможно ввести текстовое поле ввода со встроенным пиксельным шрифтом

Чтобы использовать пиксельный шрифт в моих текстовых полях, я создал класс шрифта в Flash IDE. Затем я создал экземпляр TextField со встроенным шрифтом, для которого сглаживание установлено как растровое. Я экспортирую SWC со всеми этими вещами.

Я создал класс с хорошим API, чтобы легко справляться с этим.

В FDT я использую класс, и все это работает правильно.

Проблема здесь в том, что теперь я хочу использовать одно из этих текстовых полей в качестве входных данных. Я попытался установить тип текстового поля в TextFieldType.INPUT, однако единственное, что он делает, это позволяет мне выделять текст, я не могу печатать. Я также создал другой актив с типом, уже установленным для ввода, тоже не работает.

Я попробовал только с активом, а не с моим классом, и тогда я могу набрать ОК.

Есть ли что-то, что препятствует редактированию текстового поля, если оно является частью спрайта? Вот код моего класса с API:

package net.jansensan.as3fflikeui.text
{
    // + ----------------------------------------
    //      [ IMPORTS ]
    // + ----------------------------------------

    import flash.display.MovieClip;
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.text.StyleSheet;
    import flash.text.TextField;
    import flash.text.TextFieldType;

    /**
    * @author Mat Janson Blanchet
    */
    public class BitmapTextfield extends Sprite
    {
        // + ----------------------------------------
        //      [ CONSTANTS ]
        // + ----------------------------------------

        [Embed(source="../assets/css/ui.css", mimeType="application/octet-stream")]
        private const   CSS :Class;


        // + ----------------------------------------
        //      [ VARIABLES ]
        // + ----------------------------------------

        // display objects
        private var _textfieldAsset :MovieClip;
        private var _textfield      :TextField;
        private var _shadow         :BitmapTextfieldAsset;

        // private / protected
        private var _styleSheet :StyleSheet;


        // + ----------------------------------------
        //      [CONSTRUCTOR ]
        // + ----------------------------------------

        public function BitmapTextfield(type:String = TextFieldType.DYNAMIC)
        {
            switch(type)
            {
                case TextFieldType.DYNAMIC:
                    _textfieldAsset = new BitmapTextfieldAsset();
                    _textfield = _textfieldAsset.textfieldTXT;
                    _textfield.selectable = false;
                    break;

                case TextFieldType.INPUT:
                    _textfieldAsset = new BitmapInputTextfieldAsset();
                    _textfield = _textfieldAsset.textfieldTXT;
                    _textfield.selectable = true;
                    break;
            }
            _textfield.htmlText = "";

            _shadow = new BitmapTextfieldAsset();
            _shadow.textfieldTXT.htmlText = "";
            _shadow.x = 1;
            _shadow.y = 1;

            _styleSheet = new StyleSheet();
            _styleSheet.parseCSS(new CSS());
            setStyle(_styleSheet);

            addChild(_shadow);
            addChild(_textfieldAsset);
        }


        // + ----------------------------------------
        //      [ PUBLIC METHODS ]
        // + ----------------------------------------

        public function setWidth(newWidth:int):void
        {
            _textfield.width = newWidth;
            _shadow.textfieldTXT.width = newWidth;
        }


        public function setHeight(newHeight:int):void
        {
            _textfield.height = newHeight;
            _shadow.textfieldTXT.height = newHeight;
        }


        public function setStyle(newStyle:StyleSheet):void
        {
            _styleSheet = newStyle;
            _textfield.styleSheet = _styleSheet;
        }


        public function setText(newText:String):void
        {
            _textfield.htmlText = newText;
            _shadow.textfieldTXT.htmlText = newText;
        }


        public function getText():String
        {
            return _textfield.text;
        }


        public function getHTMLText():String
        {
            return _textfield.htmlText;
        }


        public function getTextNumLines():uint
        {
            return _textfield.numLines;
        }


    }
}

Любое руководство будет полезно, заранее спасибо!

-мат.

1 ответ

Текстовое поле с таблицей стилей недоступно для редактирования. Другими словами, текстовое поле со свойством типа, установленным в TextFieldType.INPUT применяет StyleSheet текст по умолчанию для текстового поля, но контент больше не будет редактироваться пользователем. Рассмотрите возможность использования TextFormat класс для назначения стилей для ввода текстовых полей.

Другие вопросы по тегам