今天有个需求,输入身份证,但是不用键盘,要点击按钮输入数字,并且可以控制光标,
1、数字按钮:点击后text添加数字内容
2、删除按钮:删除光标前的一个字符
3、左箭头:移动光标向左移动
text内容显示光标并控制
public void InitNumberButton(){//number是这些按钮的父物体Button[] buttons= number.GetComponentsInChildren<Button>();StringBuilder builder=new StringBuilder();foreach (Button button in buttons){if(button.name=="Delect"){button.onClick.AddListener(() => {DeleteCharacterBeforeCursor();});}else if(button.name=="zuo"){button.onClick.AddListener(() => {MoveCursorLeft();});}else{button.onClick.AddListener(() => {//currentText = builder.Append(button.name).ToString();characterToInsert=button.name;// identityInput.text = builder.Append(button.name).ToString();InsertCharacter();});}}}private string currentText = ""; // 当前的文本内容private int cursorPosition = 0; // 光标的位置(索引)private string characterToInsert = "A";// 更新显示文本(包括光标位置)void UpdateDisplayText(){// 在光标位置插入特殊符号来模拟光标string textWithCursor = currentText.Insert(cursorPosition, "|");card.text = textWithCursor;}// 插入字符并将光标移到字符后面void InsertCharacter(){// 在光标位置插入字符currentText = currentText.Insert(cursorPosition, characterToInsert);// 将光标移到插入字符后面cursorPosition++;// 更新显示UpdateDisplayText();}// 控制光标向左移动void MoveCursorLeft(){// 如果光标没有移到最左边,则移动光标if (cursorPosition > 0){cursorPosition--;}// 更新显示UpdateDisplayText();}// 删除光标前的一个字符void DeleteCharacterBeforeCursor(){// 如果光标不在文本开头,则删除光标前的字符if (cursorPosition > 0){// 删除光标前的字符currentText = currentText.Remove(cursorPosition - 1, 1);// 将光标位置移动到删除的位置cursorPosition--;// 更新显示UpdateDisplayText();}}