Como posso referenciar o TextInput de um ComboBox editável?
-
03-07-2019 - |
Pergunta
Eu tenho um componente ComboBox editável e eu quero fazer referência a TextInput que é mostrado, para programaticamente selecionar o texto nele. Isto é muito simples em um TextInput:
private function selectNameText():void
{
nameTextInput.selectionBeginIndex = 0;
nameTextInput.selectionEndIndex = nameTextInput.text.length;
}
Mas eu não posso encontrar alguma maneira de acessar o TextInput de um ComboBox editável.
Solução
Parece que referenciando o TextInput para ESTA razão é desnecessária, uma vez que o texto é selecionado por padrão.
Outras dicas
Eu corri para este problema ao usar uma caixa de combinação como um DataGrid itemRenderer. Se você precisar fazer referência a TextInput você pode substituir ComboBox e criar um getter que retorna a textInput protegida. No meu caso eu precisava para evitar a auto-seleção de que ocorre quando uma caixa de combinação é editável. Olhando para ComboBox, isso ocorre durante updateDisplayList por isso deve fazer o truque:
package com.whatever.controls
{
import mx.controls.ComboBox;
public class EditableComboBox extends ComboBox
{
public function EditableComboBox()
{
super();
}
override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void
{
super.updateDisplayList(unscaledWidth, unscaledHeight);
if (editable)
{
textInput.selectionBeginIndex = text.length;
textInput.selectionEndIndex = text.length;
}
}
}
}
Durante o evento "Criação completa" da caixa de combinação, você poderia obter o componente diretamente:
private function creationCompleteEvt ( evt:FlexEvent ) : void
{
var targTextInput:UITextInput = UITextInput( myComboBox.getChildAt(2) );
targTextInput.setSelection( 0, targTextInput.selectionEndIndex );
}