Unity主动聚焦InputField并且设置光标位置
前言
在一次文本输入的设计中,需要用到点击自定义的Button来删除InputField里对应光标位置的字符,并且保持InputField和光标不会丢失焦点
-
实现删除字符
-
实现InputField焦点不丢失
-
实现光标不消失
-
解决光标重设时,由于自动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;
-
}
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhibfabf
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
微信运动停用后别人还能看到步数吗
PHP中文网 07-22 -
excel打印预览压线压字怎么办
PHP中文网 06-22