AS3: setSelection Override Arrow Override - PullRequest
       2

AS3: setSelection Override Arrow Override

1 голос
/ 08 февраля 2011

Я хотел бы сосредоточиться на конце TextField при нажатии стрелки вверх. Я использую:

txt.setSelection(txt.text.length,txt.text.length);

Это прекрасно работает для любой клавиши, кроме стрелки вверх. Я считаю, что стрелка вверх автоматически устанавливает выделение в начало TextField, когда оно находится в фокусе. Как я могу переопределить это поведение по умолчанию?

Ответы [ 2 ]

5 голосов
/ 17 июля 2011

Я хотел изменить поведение клавиши home, вот как я это сделал:
(Следующий код должен по существу отключить ключ HOME, но его можно изменить, чтобы он делал что угодно)

// Create two variables two remember the TextField's selection
// so that it can be restored later. These varaibles correspong
// to TextField.selectionBeginIndex and TextField.selectionEndIndex
var overrideSelectionBeginIndex:int = -1;
var overrideSelectionEndIndex:int;

// Create a KEY_DOWN listener to intercept the event ->
// (Assuming that you have a TextField named 'input')
input.addEventListener(KeyboardEvent.KEY_DOWN, event_inputKeyDown, false, 0, true);

function event_inputKeyDown(event:KeyboardEvent):void{
    if(event.keyCode == Keyboard.HOME){
        if(overrideSelectionBeginIndex == -1){
            stage.addEventListener(Event.RENDER, event_inputOverrideKeyDown, false, 0, true);
            stage.invalidate();
        }

        // At this point the variables 'overrideSelectionBeginIndex'
        // and 'overrideSelectionEndIndex' could be set to whatever
        // you want but for this example they just store the
        // input's selection before the home key changes it.
        overrideSelectionBeginIndex = input.selectionBeginIndex;
        overrideSelectionEndIndex   = input.selectionEndIndex;
    }
}

// Create a function that will be called after the key is
// pressed to override it's behavior
function event_inputOverrideKeyDown(event:Event):void{
    // Restore the selection
    input.setSelection(overrideSelectionBeginIndex, overrideSelectionEndIndex);

    // Clean up
    stage.removeEventListener(Event.RENDER, event_inputOverrideKeyDown);
    overrideSelectionBeginIndex = -1;
    overrideSelectionEndIndex   = -1;
}
0 голосов
/ 08 февраля 2011

есть функция Prevent Default (aliveocs) , которую вы можете применить к действию, если оно отменяется (что, я предполагаю, будет), в противном случае вы можете попытаться поймать его с помощью stopPropagation вместо:

Это не было проверено, но должно выглядеть примерно так:

function buttonPress(ev:KeyboardEvent):void{
    txt.setSelection(txt.text.length,txt.text.length);
    ev.preventDefault();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...