UiTextInputBus strange behavior

Guys, since version 1.8 I have seen this issue but I am not sure if I am using this bus correctly.

Whenever I call UiTextInputBus.Event.SetText(entId, str), the text string is placed in the input field but it does not show up.

The only way to make it appears is to have a whitespace in the field before I call it. But for fields that the user is editing is a little bit annoying because I have to track all the events to left a whitespace there.

What am I doing wrong?

Tks!

Hi @aridias - there are two text elements (separate entities) associated with the element that has a UiTextInputComponent: the “text” and the “placeholder text”. To set the text, you will first need to get the entity ID of the text entity associated with the text input element, and then call SetText using the UiTextBus (as opposed to the UiTextInputBus). For example:

textEntity = UiTextInputBus.Event.GetTextEntity(textInputEntityId)
UiTextBus.Event.SetText(textEntity, "Hello world!")

Here are the Lua script reference pages for UiTextInputBus and UiTextBus:

http://docs.aws.amazon.com/lumberyard/latest/developerguide/lua-scripting-ces-api-ui-uitextinputcomponent.html

http://docs.aws.amazon.com/lumberyard/latest/developerguide/lua-scripting-ces-api-ui-uitextcomponent.html

Hope that helps!

Apologies - I actually didn’t realize there was a SetText method directly available on the UiTextInputBus. I’ll look into this a little more to see what’s going on!

I think there’s an issue with how the text input component updates when its text element value changes. I’m investigating this and will update once I have more information!

Thanks @aridias for bringing this to our attention! There is an issue where the text input component’s text element doesn’t update properly when accessing the text input component directly via bus (such as through Lua script). We will include a fix for this in a future release of Lumberyard!

In the meantime, you can fix this by adding the following line to UiTextInputComponent.cpp:

m_childTextStateDirtyFlag = true;

Add that line to the following functions (at the beginning is fine):

void UiTextInputComponent::SetText(const AZStd::string& text)
void UiTextInputComponent::SetTextEntity(AZ::EntityId textEntity)
void UiTextInputComponent::SetPlaceHolderTextEntity(AZ::EntityId textEntity)

tks! it is working!

Great! Thank you for confirming that it’s working for you now. We’ll include that fix in a future release.

Fixed in 1.12, thanks.