Search Unity

  1. Welcome to the Unity Forums! Please take the time to read our Code of Conduct to familiarize yourself with the forum rules and how to post constructively.

TextMesh Pro Changing InputField ContentType via script does not update text

Discussion in 'UGUI & TextMesh Pro' started by RhinocerosGamesProduction, Jul 21, 2020.

  1. RhinocerosGamesProduction


    Dec 19, 2017
    Hey guys I came across an interesting problem with TMPro Input fields and their content type. I created a "register profile" screen where the user is prompted to enter and verify a password (content type for input field is therefore set to "password"). Additionally I added a button next to the input fields that is supposed to hide/unhide the password. I wrote a simple script that has both inputfields referenced and on the button click, this script changes the content types to default for both fields. However, the passwords are only unhidden when I click on them (which updates this input field I assume). I also managed to create a hacky solution where the script selects the fields after changing the content type, which worked, but is just not acceptable for mobile plattform since each time you select a input field, the mobile keyboard opens itself which is of course annoying if you just want to hide/unhide your password.

    TL;DR: Changing content type for TMPro input fields via script does not automatically update the text that is in the input field, e.g. hide/unhide password

    Any ideas?
    ShantiB95 and AlanMattano like this.
  2. ShantiB95


    Feb 8, 2017
    Any proper solution for this yet?


    I just used this and it works fine:

    Code (CSharp):
    1. passText.textComponent.SetAllDirty();
    Last edited: Mar 3, 2021
  3. nugiesatriya


    Sep 13, 2020
    this my script for visibility password on textmeshpro, you can copy this code or just download it

    //put this script on button, and put the button on the child of TMP_InputField password
    public Button visibilityPassword;
    public TMP_InputField password;
    private void Awake()
    visibilityPassword = GetComponent<Button>();
    password = GetComponentInParent<TMP_InputField>();

    private void ShowHidePassword()
    if (password.contentType == TMP_InputField.ContentType.Standard)
    password.contentType = TMP_InputField.ContentType.Password;
    password.contentType = TMP_InputField.ContentType.Standard;


    Attached Files:

  4. SweatIRL


    Jun 12, 2021
    Since there is still no viable answer here, I will attempt to answer the question swiftly:

    All you need to do in order to "Update" the Input Field is to use the following Method:
    Code (CSharp):
    1. InputField.ForceLabelUpdate()
    You would want to use this after changing the Content Type, i.e.
    Code (CSharp):
    1. inputField.contentType = InputField.ContentType.Password;
    2. inputField.ForceLabelUpdate();
    An example of the full implementation of the Method could therefore be:
    Code (CSharp):
    1. [SerializeField] InputField inputField;
    3. void TogglePassword() {
    4.     if (inputField.contentType == InputField.ContentType.Password) {
    5.         inputField.contentType = InputField.ContentType.Standard;
    6.     } else {
    7.         inputField.contentType = InputField.ContentType.Password;
    8.     }
    9.     inputField.ForceLabelUpdate();
    10. }
    Using my implementation, you would of course have to drag the InputField onto the Script from within the Editor.
    Another way you could do it is by using
    Code (CSharp):
    1. GetComponent<>();
    But that way, the Script would have to be on the same GameObject. You could also get the Parent or Child and such, but a lot of the time I will just prioritize dragging and dropping using the Editor as it could be much less of a hassle.

    Hope this helped ^^
  5. tugrulsubekci


    May 30, 2022
    it worked thanks!