We are using unity 2018.4.32 on mobile platforms including apple TV. We are using a TMP_InputField to capture user input and display it on screen. Our game supports both controller and touch inputs.
We are currently calling m_InputField.Select() when the user presses a button on the controller, this does successfully bring up the onscreen keyboard for all devices. However, once the keyboard is closed (either cancelled or return is pressed), calling this method yields no onscreen keyboard. i.e. we can only get the keyboard to show once, and the app needs to be restarted for the onscreen keyboard to show again.
If the user touches the input screen, the keyboard successfully comes up, and is able to open the keyboard as many times as they like. This issue is only happens when trying to display the onscreen keyboard via code.
Is there something else we should be calling to clear some funky state?
I have tried to recreate the issue in an empty project, to which I have been unable to recreate it with a simple UI button (calling m_InputField.Select() on click), I have confirmed that using this same setup seems to work in our project too.
I will need to install rewired into the empty project and set that up to create a more accurate setup - Maybe its more of a case of when m_InputField.Select() is being called.
To try and map out the problem a little more I created this flow diagram
Once the keyboard is in the “keyboard Does not open” state, it can only be opened by touch (or a ui button), when the keyboard is closed via tapping away from the keyboard, it returns to the normal functional state and is able to be opened via controller once more. Interestingly if you open it by controller, press done, open it by touch press done, it can not be opened by controller
–update–
I have ruled out that the Select() is being called at a strange time option. On controller input i toggle a bool, then on update when that bool is true I open the keyboard (and toggle the bool back again). The result is the issue still happens