添加新行时,如何以编程方式滚动到 Flex Spark Textarea 的末尾?
Posted
技术标签:
【中文标题】添加新行时,如何以编程方式滚动到 Flex Spark Textarea 的末尾?【英文标题】:How do I programmatically scroll to the end of a Flex Spark Textarea when a new line is added? 【发布时间】:2011-11-11 10:42:54 【问题描述】:mx:TextArea 的旧方法不再有效。具体来说:
myMxTextArea.verticalScrollPosition = myMxTextArea.maxVerticalScrollPosition;
我为 Spark 找到了这种方法,但似乎有点笨拙:
mySparkTA.scrollToRange(mySparkTA.text.length-1, mySparkTA.text.length);
有没有更直接的方法来做到这一点?
【问题讨论】:
【参考方案1】:假设你有
<s:TextArea id="ta" />
以下将起作用:
ta.scroller.verticalScrollBar.value = ta.scroller.verticalScrollBar.maximum;
无需将 TextArea 包装在 Scroller 组件中。
【讨论】:
不要忘记 validateNow() 否则 UI 可能会刷新【参考方案2】:这就是你使用 spark textarea 的方法,但你总是可以尝试将它包装在一个 Scroller 组件中,而不用让 textarea 本身为滚动而烦恼:
<s:Scroller id="scroller">
<s:TextArea id="ta" />
</s:Scroller>
然后在 AS 中这样做:
scroller.verticalScrollBar.value = scroller.verticalScrollBar.maximum;
没有其他简单的方法可以做到这一点。
【讨论】:
谢谢。这可能在某一时刻有效,但在最新的 SDK 4.6 中我收到此错误,“'spark.components.TextArea' 不可分配给'spark.core.IViewport' 类型的默认属性'viewport'。”另外,你在什么事件上调用 AS 代码? 是的,它可能不再起作用了。您需要用 Group 或其他东西包装 TextArea。我不太清楚你在哪个事件上调用它是什么意思...【参考方案3】:spark TextArea 有一个“appendText”方法 这会附加文本并自动向下滚动到添加的行..
【讨论】:
【参考方案4】:<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 事件的监听器。这可能会妨碍某人打字,但在此用例中可能工作正常。
【讨论】:
为什么这被否决了?它对我来说很成功。以上是关于添加新行时,如何以编程方式滚动到 Flex Spark Textarea 的末尾?的主要内容,如果未能解决你的问题,请参考以下文章
当新行添加到 UITextView 实例中时,如何向上滚动视图?