ActionScript 3 TextField scrollH свойство получает значение 0 при нажатии

Я программно заполняю текстовое поле и прокручиваю его до maxScrollH по мере добавления нового текста, чтобы пользователь мог видеть прогресс текста. Это работает нормально, пока я не щелкну TextField, который устанавливает scrollH обратно в 0 и помещает курсор в текст в эквивалентную позицию.

textField.setSelection( text.length, text.length ); //sets the caretIndex/selection to the end
textField.scrollH = textField.maxScrollH; //scrolls to max

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

override protected function createChildren() : void
{
    super.createChildren();
    textField.addEventListener(MouseEvent.CLICK, handleTextFieldClick, false, 0, true);
}

protected function handleTextFieldClick(event:MouseEvent):void
{
    textField.scrollH = currentTextFieldScrollPosition; //stored scrollH value
    trace(textField.scrollH);
}

Я предполагаю, что где-то вычисляется или сохраняется позиция прокрутки, которую я не могу найти.


person Joel Hooks    schedule 20.09.2009    source источник


Ответы (2)


Flex TextInput устанавливает выбор текстового поля:

/**
 *  @private
 *  Gets called by internal field so we draw a focus rect around us.
 */
override protected function focusInHandler(event:FocusEvent):void
{
    if (event.target == this)
        systemManager.stage.focus = TextField(textField);

    var fm:IFocusManager = focusManager;

    if (editable && fm)
    {
        fm.showFocusIndicator = true;
        if (textField.selectable &&
            _selectionBeginIndex == _selectionEndIndex)
        {
            textField.setSelection(0, textField.length);
        }
    }

    [...]

переопределение этого в моем компоненте устраняет эту проблему:

    override protected function focusInHandler(event:FocusEvent):void
    {
        super.focusInHandler(event);
        textField.scrollH = currentTextFieldScrollPosition;
    }
person Joel Hooks    schedule 20.09.2009
comment
У меня такая же проблема с AS3 (UIScrollbar в TextArea сбрасывает свою позицию, когда фокус на текстовой области получается, а затем теряется), но focusInHandler, похоже, никогда не вызывается для меня, чтобы переопределить его. Я также не получаю первый блок кода - это то, что обычно делает focusInHandler? Что вы пытаетесь сделать с этим по-другому? [...] меня смущает - если это не код по умолчанию для focusinhandler, зачем вы его усекаете? Я относительно новичок в AS3. - person Amalgovinus; 18.10.2010

Оказывается, вам нужно создать обработчик onclick для окна с UIScrollbar, а затем добавить для него прослушиватель событий focus out, который передает местоположение полосы прокрутки во время onclick в фокус. ActionScript 3: сохранение положения полосы прокрутки UI в текстовой области на потеря фокуса при встраивании Flash

person Amalgovinus    schedule 25.10.2010