当向Flex Spark Textarea中添加新行时,我该如何编程实现自动滚动到末尾?

5

mx:TextArea的旧方法已不再适用。具体来说:

myMxTextArea.verticalScrollPosition = myMxTextArea.maxVerticalScrollPosition;

我找到了这个Spark的方法,但似乎有些笨拙:

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

有没有更简单的方法来做这件事?
4个回答

5
假设您已经拥有:
<s:TextArea id="ta" width="100%" height="100%" />

以下内容可行:
ta.scroller.verticalScrollBar.value = ta.scroller.verticalScrollBar.maximum;

不需要将TextArea包装在滚动器组件中。

不要忘记使用 validateNow() 方法,否则界面可能无法刷新。 - Adrian Pirvulescu

2
那就是你使用Spark文本区域的方法,但你也可以尝试将其包装在滚动条组件中,让文本区域本身不必操心滚动:
<s:Scroller id="scroller">
   <s:TextArea id="ta" width="100%" height="100%" />
</s:Scroller>

那么在AS中完成这个操作:

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

没有其他更加简单的方法来完成它。


谢谢。这在一定程度上可能有效,但在最新的SDK 4.6中我得到了这个错误:“'spark.components.TextArea'无法分配给类型为'spark.core.IViewport'的默认属性'viewport'。” 另外,您要在哪个事件上调用AS代码? - 1.21 gigawatts
是的,它可能不再起作用了。你需要用 Group 或其他东西来包装 TextArea。我不太确定你所说的是哪个事件... - J_A_X

1
Spark TextArea有一个“appendText”方法,它可以将文本追加到现有文本的末尾,并自动滚动到添加的行。

0
<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事件的监听器。这可能会妨碍某些人的输入,但对于此用例可能效果良好。


为什么这个被踩了?它在我这里成功运行了。 - 1.21 gigawatts

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接