2013-08-13 35 views
5

Jak AutoScroll do dołu TextField ActionScript podczas dodawania tekstu tam programowo:AS3 TextField Autoscroll do dolnej

var _output:TextField = new TextField(); 
for (var i:int = 0; i < 100; ++i) { 
    _output.appendText("Hello World!"); 
} 

również pod uwagę, że pionowe przewijanie TextField powinien być włączony, a gdy nowy został dodany tekst, a autoskarowanie na dole powinno zostać wykonane ponownie.

+1

nocie, że jesteś przypisywanie "Hello World!" do '_output.text' sto razy z rzędu. Zamiast tego należy wywołać 'appendText()'. – Vesper

+0

Masz rację, dzięki! – Narek

Odpowiedz

7

Powinieneś posłuchać zdarzenia Event.CHANGE na danym polu tekstowym. Event description relative to textField Jeśli przechwycisz to wydarzenie, grasz z właściwością scrollV. Powiedzieć tak:

_output.addEventListener(Event.CHANGE,scrollAllDown); 
function scrollAllDown(e:Event):void { 
    var tf:TextField=(e.target as TextField); 
    if (!tf) return; 
    tf.scrollV=tf.maxScrollV; 
} 

Aktualizacja: Catching Event.CHANGE nie działa, zostawiam to w przypadku, gdy ktoś potknie się na tej metodzie, a także dowiaduje się, że nie działa. Tak więc jedynym sposobem jest podklasy TextField i ręcznie nadpisać appendText() metody obejmują przewijany tak:

public class OutputTF extends TextField 
{ 
    // constructor omitted 
    override public function appendText(text:String):void 
    { super.appendText(text); this.scrollV=this.maxScrollV; } 
} 
+0

Dlaczego otrzymujesz 'e.target jako TextField'? Zamiast tego nie możesz użyć '_output' biorąc pod uwagę, że faktycznie jest to statyczny element klasy? – Narek

+1

Cóż, powiedzmy, że potrzebujesz więcej niż pojedynczej textField do autoprzewijania - wtedy będziesz mieć dwa wiersze 'addEventListener (Event.CHANGE, scrollAllDown)' na dwa różne pola TextFields i określić *, które * TextField wysłało zdarzenie, ty będzie musiał przetworzyć 'e.target'. – Vesper

+0

To nie działa: 'appendText' nie wysyła' Event.CHANGE' gdy tekst jest zmieniany ** programowo **. – Narek

3

Można użyć właściwości scrollV i maxScrollV z TextField:

var _output:TextField = new TextField(); 
for (var i:int = 0; i < 100; ++i) { 
    _output.appendText("Hello World!"); 
    //set vertical scroll position to max value 
    _output.scrollV = _output.maxScrollV; 
}