Unity3d 2017的InputField在手机上会有奇怪的表现
当点击输入框时,会呼唤出软键盘。此时点击软键盘外收回软键盘,再次点击输入框,无法将软键盘唤出。只有先点击其他位置,在点击输入框才能重新呼唤出软键盘
查找原因
猜测是第一次点击收回软键盘的时候没有取消掉InputField上的焦点。最初的尝试是监听onEndEdit接口,然后调用DeactivateInputField()接口去取消
mInput.onEndEdit.AddListener(delegate
{
mInput.DeactivateInputField();
});
结果发现还是不行,打了断点发现根本没有走进onEndEdit的监听事件里
重载源码
看了下InputField的源码,才发现OnPointerDown函数中有很多坑,这里贴上源码给大家先看一下
public override void OnPointerDown(PointerEventData eventData)
{
if (!MayDrag(eventData))
return;
EventSystem.current.SetSelectedGameObject(gameObject, eventData);
bool hadFocusBefore = m_AllowInput;
base.OnPointerDown(eventData);
if (!InPlaceEditing())
{
if (m_Keyboard == null || !m_Keyboard.active)
{
OnSelect(eventData);
return;
}
}
// Only set caret position if we didn't just get focus now.
// Otherwise it will overwrite the select all on focus.
if (hadFocusBefore)
{
Vector2 localMousePos;
RectTransformUtility.ScreenPointToLocalPointInRectangle(textComponent.rectTransform, eventData.position, eventData.pressEventCamera, out localMousePos);
caretSelectPositionInternal = caretPositionInternal =