简体   繁体   中英

IUITextField equivalents in flex4 TextArea

I have some flex3 code that uses a TextArea to select a line from a char index:

var tf:IUITextField=ta.mx_internal::getTextField();
var lineIndex:int= tf.getLineIndexOfChar(someCharIndex);
var lineCharIndex:int= tf.getLineOffset(lineIndex);
var lineLength:int= tf.getLineLength(lineIndex);
ta.setSelection(lineCharIndex, lineCharIndex+lineLength);

I'd like to upgrade this to flex4's TextArea, but I'm not sure what the flex4 equivalents of the IUITextField methods are (getLineIndexOfChar, getLineOffset, getLineLength).

Can someone point me to some docs for these methods?

Here is a simple application which illustrates how to select text line with Spark TextArea using TLF and its TextFlow :

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
    xmlns:s="library://ns.adobe.com/flex/spark" 
    xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600" creationComplete="init()">
    <fx:Script>
    <![CDATA[
        import flashx.textLayout.compose.TextFlowLine;
        import flashx.textLayout.elements.TextFlow;
        import flashx.textLayout.events.SelectionEvent;

        private function init():void
        {
            var textFlow:TextFlow = ta.textFlow;
            textFlow.addEventListener(SelectionEvent.SELECTION_CHANGE, textFlow_selectionChangeHandler);
        }

        private function textFlow_selectionChangeHandler(event:SelectionEvent):void
        {
            // Just getting char index
            var selectionStart:int = event.selectionState.absoluteStart;
            var textFlow:TextFlow = ta.textFlow;
            var line:TextFlowLine = textFlow.flowComposer.findLineAtPosition(selectionStart);
            ta.selectRange(line.absoluteStart, line.absoluteStart + line.textLength);
        }
    ]]>
    </fx:Script>
    <s:TextArea width="400" height="200" verticalCenter="0" horizontalCenter="0" id="ta">
        Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor 
        incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco 
        laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate 
        velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, 
        sunt in culpa qui officia deserunt mollit anim id est laborum.      
    </s:TextArea>
</s:Application>

All that you need is located in textFlow_selectionChangeHandler() method. After determining char position we extracted TextFlowLine for this position and then selected it. To test this code just click somewhere in your TextArea .

Hope this helps!

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM