2013-08-13 14 views
5

Come Autoscroll per la parte inferiore del TextField in ActionScript, mentre l'aggiunta di testo non a livello di codice:AS3 TextField scorrimento automatico al fondo

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

Considera anche che lo scorrimento verticale del TextField deve essere attivata, e una volta che una nuova il testo è stato aggiunto, quindi lo scorrimento automatico verso il basso dovrebbe essere eseguito nuovamente.

+1

Nota che siete assegnando "Hello World!" per '_output.text' un centinaio di volte di seguito. Dovresti invece chiamare 'appendText()'. – Vesper

+0

Hai ragione, grazie! – Narek

risposta

7

È necessario ascoltare l'evento Event.CHANGE nel campo di testo in questione. Event description relative to textField E se si cattura questo evento, si gioca con la proprietà scrollV. Dire, come questo:

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

Aggiornamento: Catching Event.CHANGE non funziona, lascio questo nel caso in cui qualcuno inciampa su questo metodo e troppo scopre che non funziona. Così, l'unico modo è quello di sottoclasse il TextField e sovrascrivere manualmente appendText() metodo per includere lo scorrimento, in questo modo:

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

Perché ottieni 'e.target come TextField'? Invece non potresti usare '_output' considerando che in realtà è un membro statico di una classe? – Narek

+1

Bene, supponiamo che tu abbia bisogno di più di un campo di testo per lo scorrimento automatico - allora avrai due righe di 'addEventListener (Event.CHANGE, scrollAllDown)' in due campi di testo diversi e per determinare * quale * TextField ha inviato l'evento, tu sarà necessario elaborare 'e.target'. – Vesper

+0

Questo non funziona: 'appendText' non invia' Event.CHANGE' quando il testo viene modificato ** a livello di codice **. – Narek

3

È possibile utilizzare le proprietà scrollV e maxScrollV di 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; 
} 
Problemi correlati