Unity主动聚焦InputField并且设置光标位置

前言

在一次文本输入的设计中,需要用到点击自定义的Button来删除InputField里对应光标位置的字符,并且保持InputField和光标不会丢失焦点

  1. 实现删除字符

  1. 实现InputField焦点不丢失

  1. 实现光标不消失

  1. 解决光标重设时,由于自动SelectAll时导致的选中颜色闪烁

各位有更优的办法可以分享分享 thanks~~

解决方法

private InputField m_MainIPF;
private int m_CurrentCaretPosition;
private Color m_MainIPF_selectionColor;
private Button m_DelBtn;
Start()
{
    m_MainIPF.onEndEdit.AddListener((value)=> {
                m_CurrentCaretPosition = m_MainIPF.caretPosition;
            });
    m_DelBtn.onClick.AddListener(OnClickDelBtn);
}
private void OnClickDelBtn()
{
    var value = m_MainIPF.text;
    if (value.Length >= m_CurrentCaretPosition && m_CurrentCaretPosition > 0)
    {
        m_CurrentCaretPosition--;
        value.Remove(m_CurrentCaretPosition, 1);
        m_MainIPF.text = value;
    }
    GameEntry.Instance.StartCoroutine(ResetInputFieldCaret());
}
IEnumerator ResetInputFieldCaret()
{
    if (!m_MainIPF.isFocused)
    {
        m_MainIPF.ActivateInputField();//主动选中输入框,但是会自动执行SelectAll,未知原因
        var color = m_MainIPF_selectionColor;
        color.a = 0;//这里暂时使用的改变颜色来避免SelectAll导致的闪烁
        m_MainIPF.selectionColor = color;
    }
    yield return new WaitForEndOfFrame();//需要延迟一帧后设置光标才会生效
    m_MainIPF.caretPosition = m_CurrentCaretPosition;
    m_MainIPF.ForceLabelUpdate();//立即强制刷新光标显示,否则会在下一帧才生效
    m_MainIPF.selectionColor = m_MainIPF_selectionColor;
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值