前言
在一次文本输入的设计中,需要用到点击自定义的Button来删除InputField里对应光标位置的字符,并且保持InputField和光标不会丢失焦点
实现删除字符
实现InputField焦点不丢失
实现光标不消失
解决光标重设时,由于自动SelectAll时导致的选中颜色闪烁文章来源:https://www.toymoban.com/news/detail-636993.html
各位有更优的办法可以分享分享 thanks~~文章来源地址https://www.toymoban.com/news/detail-636993.html
解决方法
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;
}
到了这里,关于Unity主动聚焦InputField并且设置光标位置的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!