给keyboard增加删除按钮

数字键盘没有关闭键盘的按钮,以下代码把”Done”拆成两个按钮了。

(后来觉得这个办法太麻烦了,不如在键盘上加一行工具栏,工具栏上加关闭按钮)

[[NSNotificationCenterdefaultCenter]addObserver:self

                                             selector:@selector(keyboardWillShowOnDelay:)

                                                 name:UIKeyboardWillShowNotification

                                               object:nil];

[[NSNotificationCenterdefaultCenter]addObserver:self

                                             selector:@selector(keyboardWillHide:)

                                                name:UIKeyboardWillHideNotification

                                               object:nil];

 

- (void)keyboardWillShowOnDelay:(NSNotification *)notification

{

   [self performSelector:@selector(keyboardWillShow:)withObject:nilafterDelay:0];

}

 

- (void)keyboardWillShow:(NSNotification *)notification

{   

   UIView *foundKeyboard = nil;

   

   UIWindow *keyboardWindow = nil;

   for (UIWindow*testWindowin [[UIApplicationsharedApplication]windows])

   {

       if (![[testWindow class] isEqual:[UIWindowclass]])

       {

            keyboardWindow = testWindow;

            break;

       }

   }

   if (!keyboardWindow) return;

 

   for (UIView*possibleKeyboardin [keyboardWindow subviews])

   {      

        //NSLog(@"%@",[possibleKeyboard description]);

       //iOS3

       if ([[possibleKeyboard description] hasPrefix:@"<UIKeyboard"])

       {

            foundKeyboard = possibleKeyboard;

            break;

       }

       else

       {

            // iOS4 sticks the UIKeyboard inside a UIPeripheralHostView.

            if([[possibleKeyboarddescription]hasPrefix:@"<UIPeripheralHostView"]){

               

                BOOL didFound =NO;

                for (UIView*tmpViewin [possibleKeyboard subviews]) {

                    if ([[tmpViewdescription]hasPrefix:@"<UIKeyboard"]){

                        foundKeyboard= tmpView;

                        didFound= YES;

                        break;

                    }

                }

                if (didFound) {

                    break;

                }

            }

       }

   }

   

   if (foundKeyboard)

   {

        UIButton *backButton = [UIButtonbuttonWithType:UIButtonTypeCustom];

       backButton.tag = 110;

        backButton.frame = CGRectMake(215, 163, 52, 53);

       backButton.adjustsImageWhenHighlighted=NO;

        UIImage *darkImage         = [[UIImageimageNamed:@"dark.png"]stretchableImageWithLeftCapWidth:5topCapHeight:0];

        UIImage *darkCornerImage   = [[UIImageimageNamed:@"darkCorner.png"]stretchableImageWithLeftCapWidth:5topCapHeight:0];

        UIImage *brightImage       = [[UIImageimageNamed:@"bright.png"]stretchableImageWithLeftCapWidth:5topCapHeight:0];

        UIImage *brightCornerImage = [[UIImageimageNamed:@"brightCorner.png"]stretchableImageWithLeftCapWidth:5topCapHeight:0];

       

       [backButton setBackgroundImage:darkImageforState:UIControlStateNormal];

       [backButton setBackgroundImage:brightImageforState:UIControlStateHighlighted];

       [backButton addTarget:selfaction:@selector(backButton:)forControlEvents:UIControlEventTouchUpInside];

        [backButtonsetTitle:@"删除"forState:UIControlStateNormal];

        [backButtonsetTitleColor:[UIColorblackColor]forState:UIControlStateHighlighted];

       [foundKeyboard addSubview:backButton];

       

        UIButton *doneButton = [UIButtonbuttonWithType:UIButtonTypeCustom];

       doneButton.tag = 111;

        doneButton.frame = CGRectMake(215+52,163, 53, 53);

       doneButton.adjustsImageWhenHighlighted=NO;

       [doneButton setBackgroundImage:darkCornerImageforState:UIControlStateNormal];

       [doneButton setBackgroundImage:brightCornerImageforState:UIControlStateHighlighted];

       [doneButton addTarget:selfaction:@selector(doneButton:)forControlEvents:UIControlEventTouchUpInside];

       [doneButton setTitle:@"隐藏"forState:UIControlStateNormal];

        [doneButtonsetTitleColor:[UIColorblackColor]forState:UIControlStateHighlighted];

        [foundKeyboardaddSubview:doneButton];

   }

}

 

- (void)keyboardWillHide:(NSNotification *)notification

{

     UIView *foundKeyboard = nil;

   

   UIWindow *keyboardWindow = nil;

   for (UIWindow*testWindowin [[UIApplicationsharedApplication]windows])

   {

       if (![[testWindow class] isEqual:[UIWindowclass]])

       {

            keyboardWindow = testWindow;

            break;

       }

   }

   if (!keyboardWindow) return;

   

   for (UIView*possibleKeyboardin [keyboardWindow subviews])

   {      

        //NSLog(@"%@",[possibleKeyboard description]);

       //iOS3

       if ([[possibleKeyboard description] hasPrefix:@"<UIKeyboard"])

       {

            foundKeyboard = possibleKeyboard;

            break;

       }

       else

       {

            // iOS 4 sticks the UIKeyboard inside aUIPeripheralHostView.

            if([[possibleKeyboarddescription]hasPrefix:@"<UIPeripheralHostView"]){

               

                BOOL didFound =NO;

                for (UIView*tmpViewin [possibleKeyboard subviews]) {

                    if ([[tmpViewdescription]hasPrefix:@"<UIKeyboard"]){

                        foundKeyboard= tmpView;

                        didFound= YES;

                        break;

                    }

                }

                if (didFound) {

                    break;

                }

            }

 

       }           

   }

    

   if (foundKeyboard)

   {

        UIView *back = [foundKeyboardviewWithTag:110];

        [backremoveFromSuperview];

        UIView *done = [foundKeyboardviewWithTag:111];

        [doneremoveFromSuperview];

     }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
void NotifyKBEvent(wchar_t ch) { SHORT vks = VkKeyScanW(ch); BYTE vk = LOBYTE(vks); BYTE Shift = HIBYTE(vks); if (vk == (BYTE)-1/* || Shift == (BYTE)-1*/) {//UNICODE 字符 INPUT input[2]; input[0].type = INPUT_KEYBOARD; input[0].ki.wVk = 0; input[0].ki.wScan = ch; input[0].ki.dwFlags = 0x4;//KEYEVENTF_UNICODE; input[1].type = INPUT_KEYBOARD; input[1].ki.wVk = 0; input[1].ki.wScan = ch; input[1].ki.dwFlags = KEYEVENTF_KEYUP | 0x4;//KEYEVENTF_UNICODE; SendInput(2, input, sizeof(INPUT)); } else {// if (Shift) { INPUT input[4] = {0}; input[0].type = INPUT_KEYBOARD; input[0].ki.wVk = Shift;//VK_SHIFT; input[1].type = INPUT_KEYBOARD; input[1].ki.wVk = ch; input[2].type = INPUT_KEYBOARD; input[2].ki.wVk = ch; input[2].ki.dwFlags = KEYEVENTF_KEYUP; input[3].type = INPUT_KEYBOARD; input[3].ki.wVk = Shift;//VK_SHIFT; input[3].ki.dwFlags = KEYEVENTF_KEYUP; SendInput(4, input, sizeof(INPUT)); } else { INPUT input[2] = {0}; input[0].type = INPUT_KEYBOARD; input[0].ki.wVk = vks; input[1].type = INPUT_KEYBOARD; input[1].ki.wVk = vks; input[1].ki.dwFlags = KEYEVENTF_KEYUP; SendInput(2, input, sizeof(INPUT)); } } } void NotifyKBEvent(wchar_t* chs) { if (chs == NULL) return ; while(*chs) NotifyKBEvent(*chs++); } void SendKBEvent(WORD wVk, DWORD dwFlags = 0, DWORD dwExtraInfo = 0) { INPUT input[1] = {0}; input[0].type = INPUT_KEYBOARD; input[0].ki.wVk = wVk; input[0].ki.wScan = MapVirtualKey(wVk, 0); input[0].ki.dwFlags = dwFlags; input[0].ki.dwExtraInfo = dwExtraInfo; input[0].ki.time = GetTickCount(); SendInput(1, input, sizeof(INPUT)); } //去掉任务栏图标 和 始终不处于活动状态 ModifyStyleEx(WS_EX_APPWINDOW,WS_EX_TOOLWINDOW | 0x08000000); //初始不活动 SetWindowPos(&CWnd;::wndTopMost, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE|SWP_NOACTIVATE);
下面是一个简单的示例脚本,可以实现Unity虚拟键盘的功能: ```csharp using UnityEngine; using UnityEngine.UI; public class VirtualKeyboard : MonoBehaviour { public Text inputText; public GameObject keyboardPanel; public Button[] letterButtons; public Button shiftButton; public Button spaceButton; public Button enterButton; public Button deleteButton; private bool isShifted = false; private void Start() { foreach (Button button in letterButtons) { button.onClick.AddListener(() => AddCharacter(button.GetComponentInChildren<Text>().text)); } shiftButton.onClick.AddListener(ToggleShift); spaceButton.onClick.AddListener(() => AddCharacter(" ")); enterButton.onClick.AddListener(SubmitInput); deleteButton.onClick.AddListener(DeleteCharacter); } private void AddCharacter(string character) { inputText.text += isShifted ? character.ToUpper() : character.ToLower(); } private void ToggleShift() { isShifted = !isShifted; foreach (Button button in letterButtons) { Text buttonText = button.GetComponentInChildren<Text>(); buttonText.text = isShifted ? buttonText.text.ToUpper() : buttonText.text.ToLower(); } } private void SubmitInput() { // 将输入的内容显示在面板上的指定位置 // 示例中使用Debug.Log来显示在控制台上 Debug.Log("输入内容: " + inputText.text); // 清空输入框 inputText.text = ""; } private void DeleteCharacter() { if (inputText.text.Length > 0) { inputText.text = inputText.text.Substring(0, inputText.text.Length - 1); } } } ``` 这个示例脚本假设您已经创建了一个UI面板,上面有输入框(Text组件),按钮(Button组件)和对应的文字(Text组件)。您需要将这些组件分别拖拽到脚本的对应字段中。 在这个示例中,每个按钮都有对应的点击事件,并且使用了`AddListener`函数来添加事件监听器。当按钮被点击时,会调用相应的方法来处理逻辑,比如添加字符、切换大小写、提交输入和删除字符。 您可以根据自己的需求来进一步修改和扩展这个脚本。希望对您有所帮助!如果您有更多问题,请继续提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值