Как программно прокрутить до конца Flex Spark Textarea при добавлении новой строки? - PullRequest
6 голосов
/ 06 сентября 2011

Старый метод для mx: TextArea больше не работает.В частности:

myMxTextArea.verticalScrollPosition = myMxTextArea.maxVerticalScrollPosition;

Я нашел этот метод для Spark, но кажется немного хитрым:

mySparkTA.scrollToRange(mySparkTA.text.length-1, mySparkTA.text.length);

Есть более простой способ сделать это?

Ответы [ 4 ]

6 голосов
/ 05 марта 2013

Предполагая, что у вас есть

<s:TextArea id="ta" width="100%" height="100%" />

Будет работать следующее:

ta.scroller.verticalScrollBar.value = ta.scroller.verticalScrollBar.maximum;

Нет необходимости заключать TextArea в компонент Scroller.

3 голосов
/ 07 сентября 2011

Это то, что вы делаете с текстовой областью искры, но вы всегда можете попытаться обернуть ее в компонент Scroller, чтобы текстовая область не вызывала прокрутку:

<s:Scroller id="scroller">
   <s:TextArea id="ta" width="100%" height="100%" />
</s:Scroller>

Затем выполните это в AS:

scroller.verticalScrollBar.value = scroller.verticalScrollBar.maximum;

Нет другого простого способа сделать это.

2 голосов
/ 26 ноября 2012

У искры TextArea есть метод "appendText". Это добавляет текст и автоматически прокручивается вниз к добавленной строке.

0 голосов
/ 02 мая 2013
<s:TextArea id="consoleTextArea" 
            change="consoleTextArea_changeHandler(event)"
            valueCommit="consoleTextArea_valueCommitHandler(event)"
            updateComplete="scrollToTheBottom()"
            />

А затем в ActionScript:

        protected function consoleTextArea_valueCommitHandler(event:FlexEvent):void {
            scrollToTheBottom();
        }

        protected function consoleTextArea_changeHandler(event:TextOperationEvent):void {
            scrollToTheBottom()
        }

        public function scrollToTheBottom():void {
            var scrollBar:VScrollBar = consoleTextArea.scroller.verticalScrollBar;
            scrollBar.value = scrollBar.maximum;
            consoleTextArea.validateNow();

            if (scrollBar.value != scrollBar.maximum) {
                scrollBar.value = scrollBar.maximum;
                consoleTextArea.validateNow();
            }
        }

Возможно, вам потребуется поместить оператор if в цикл на несколько итераций или до тех пор, пока значение не совпадет или не приблизится к максимуму.

Обновление : добавлен прослушиватель события updateComplete. Это может помешать кому-то печатать, но может отлично подойти для этого варианта использования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...