1

ユーザーがテキストの進行状況を確認できるように、新しいテキストが追加されると、プログラムでテキストフィールドにデータを入力し、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);
}

私の推測では、見つけられない場所に計算または保存されているスクロール位置があると思います。

4

2 に答える 2

1

flex TextInput は、textField の選択を設定します。

/**
 *  @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;
    }
于 2009-09-20T19:47:02.447 に答える
1

UIScrollbar を使用してウィンドウの onclick ハンドラーを作成し、onclick 時のスクロールバーの位置をフォーカスに渡す focus out イベント リスナーを追加する必要があることがわかりました。 ActionScript 3: Flash 埋め込みでフォーカスが失われたときに textarea UIscrollbar の位置を維持する

于 2010-10-25T16:00:13.367 に答える