AS3: невозможно ввести текстовое поле ввода со встроенным пиксельным шрифтом - PullRequest
1 голос
/ 24 сентября 2011

Чтобы использовать пиксельный шрифт в моих текстовых полях, я создал класс шрифта в 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;
        }


    }
}

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

-mat.

1 Ответ

2 голосов
/ 08 марта 2012

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

...