             textDisplay.multiline = true;
             textDisplay.editable = true;
             textDisplay.wordWrap = true;
+            
+            // on iOS, resize the TextField and let the native control handle scrolling
+            _isIOS = (Capabilities.version.indexOf("IOS") == 0);
+            
+            if (!_isIOS)
+                textDisplay.addEventListener(KeyboardEvent.KEY_DOWN, textDisplay_keyHandler);
+            
             textDisplay.addEventListener(Event.CHANGE, textDisplay_changeHandler);
             textDisplay.addEventListener(FlexEvent.VALUE_COMMIT, textDisplay_changeHandler);
-            
-            // on iOS, resize the TextField and let the native control handle scrolling
-            _isIOS = (Capabilities.version.indexOf("IOS") == 0);
             
             // wrap StyleableTextComponent in Group for viewport
             textDisplayGroup = new VGroup();
             textDisplayGroup.clipAndEnableScrolling = true;
             textDisplayGroup.addElement(textDisplay);
-            
-            // scroll to the caret position
-            textDisplay.addEventListener(Event.CHANGE, caret_changeHandler);
-            textDisplay.addEventListener(FlexEvent.VALUE_COMMIT, caret_changeHandler);
         }
         
         if (!scroller)


use namespace mx_internal;

// FIXME (jasonsj): how to support TextArea#heightInLines?
/**
 *  ActionScript-based skin for TextArea components in mobile applications.
 * 

    //--------------------------------------------------------------------------
    
    private var textDisplayGroup:VGroup;
    
    private var _isIOS:Boolean;
    
    private var invalidateCaretPosition:Boolean = true;
    
    /**
     *  @private
