2013-08-13 7 views
5

Wie kommt man zum Boden des TextField- in Actionautoscroll während das Hinzufügen von Text es programmatisch:AS3 TextField- Autoscroll auf den Boden

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

Beachten Sie auch, dass die vertikale Scrollen des TextField- aktiviert werden soll, und sobald eine neue Text wurde hinzugefügt, dann Autoscroll an der Unterseite sollte erneut ausgeführt werden.

+1

Beachten Sie, dass Sie Zuweisen von "Hallo Welt!" zu "_output.text" hundert Mal in Folge. Sie sollten stattdessen 'appendText()' aufrufen. – Vesper

+0

Sie haben Recht, danke! – Narek

Antwort

7

Sie sollten für das betreffende TextField auf das Ereignis Event.CHANGE warten. Event description relative to textField Und wenn Sie dieses Ereignis erfassen, spielen Sie mit scrollV Eigenschaft. Sag mal, wie folgt aus:

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

Update: Event.CHANGE Fangen nicht funktioniert, lasse ich dies, falls jemand auf diese Methode stolpert und zu findet heraus, dass es nicht funktioniert. So ist die einzige Möglichkeit, die TextField und manuell appendText() Methode überschreiben, um eine Unterklasse gehören Scrollen, wie folgt aus:

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

Warum erhalten Sie das 'e.target als TextField'? Können Sie '_output' nicht verwenden, wenn man bedenkt, dass es sich tatsächlich um ein statisches Mitglied einer Klasse handelt? – Narek

+1

Nun, nehmen wir an, Sie brauchen mehr als ein einzelnes textField zum Autoscroll - dann haben Sie zwei Zeilen von 'addEventListener (Event.CHANGE, scrollAllDown)' zu zwei verschiedenen TextFields, und um zu bestimmen, * welches * TextField das Ereignis ausgelöst hat muss "e.target" verarbeiten. – Vesper

+0

Das funktioniert nicht: 'appendText' versendet' Event.CHANGE' nicht, wenn Text ** programmgesteuert ** geändert wird. – Narek

3

Sie die scrollV und maxScrollV Eigenschaften von TextField- verwenden können:

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; 
}