cammil
cammil

Reputation: 9939

How do I set focus and selection on a TextField?

I am trying to programmatically pass focus to a newly created TextField, but for some reason setSelection and setFocus do not work. For example, see my test code below:

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical" creationComplete="_init()">
<mx:Button click="{tf.setSelection(1,2)}" />
<mx:Script>
<![CDATA[
import mx.core.UIComponent;
    public var tf:TextField 


    private function _init():void{

        tf = new TextField();

            tf.text = "abcdefghijk";
    tf.type = TextFieldType.INPUT;
    tf.autoSize = TextFieldAutoSize.LEFT;

    var ui:UIComponent = new UIComponent();
    ui.addChild(tf);
        addChild(ui);
        tf.setSelection(0,1);
        ui.setFocus();

        ui.addEventListener(MouseEvent.MOUSE_DOWN, function():void{
            tf.setSelection(0,3);
        });
    }

]]>
</mx:Script>    
</mx:Application>

The only setSelection that does anything is the 0,3 one on MOUSE_DOWN. I assume this all has something to do with the text field receiving focus with the mouse click, but I cannot for the life of me figure out how to do this manually.

Upvotes: 0

Views: 2044

Answers (2)

cammil
cammil

Reputation: 9939

On investigating other classes, motivated by Florian's suggestion, I came across UITextField which subclasses TextField. Though it does not implement the IFocusManagerComponent interface, it does have a setFocus method, which at this moment in time seems to be working.

As an added benefit, it can be added to a container directly, that is, without having to construct a UIComponent parent first.

Upvotes: 1

Florian F
Florian F

Reputation: 8875

setFocus works on components that implement the mx.managers.IFocusManagerComponent. Textfield is not a Flex component and doesn't implement this interface, that's why it doesn't work. If I were you, I would use a TextInput instead seeing that you need an input control

Upvotes: 1

Related Questions