Creating a custom UIKeyBoard for iPhone

后端 未结 2 648
小鲜肉
小鲜肉 2020-12-03 02:37

If anyone has the app GymBuddy, then they will know what I am talking about. They seem to use the stock Number Pad keyboard but have added a \".\" button in the lower left a

相关标签:
2条回答
  • 2020-12-03 03:04

    I have done this. Basically you add your own button as a subview of the UIKeyboard like this:

    // This function is called each time the keyboard is going to be shown
    - (void)keyboardWillShow:(NSNotification *)note {
    
    // Just used to reference windows of our application while we iterate though them
    UIWindow* tempWindow;
    
    // Because we cant get access to the UIKeyboard throught the SDK we will just use UIView. 
    // UIKeyboard is a subclass of UIView anyways
    UIView* keyboard;
    
    // Check each window in our application
    for(int c = 0; c < [[[UIApplication sharedApplication] windows] count]; c ++)
    {
        // Get a reference of the current window
        tempWindow = [[[UIApplication sharedApplication] windows] objectAtIndex:c];
    
        // Loop through all views in the current window
        for(int i = 0; i < [tempWindow.subviews count]; i++)
        {
            // Get a reference to the current view
            keyboard = [tempWindow.subviews objectAtIndex:i];
    
            // From all the apps i have made, they keyboard view description always starts with <UIKeyboard so I did the following
            if([[keyboard description] hasPrefix:@"<UIKeyboard"] == YES)
            {
                // Only add the Decimal Button if the Keyboard showing is a number pad. (Set Manually through a BOOL)
                if (numberPadShowing && [keyboard viewWithTag:123] == nil) {
    
                    // Set the Button Type.
                    dot = [UIButton buttonWithType:UIButtonTypeCustom];
    
                    // Position the button - I found these numbers align fine (0, 0 = top left of keyboard)
                    dot.frame = CGRectMake(0, 163, 106, 53);
                    dot.tag = 123;
    
                    // Add images to our button so that it looks just like a native UI Element.
                    [dot setImage:[UIImage imageNamed:@"dotNormal.png"] forState:UIControlStateNormal];
                    [dot setImage:[UIImage imageNamed:@"dotHighlighted.png"] forState:UIControlStateHighlighted];
    
                    //Add the button to the keyboard
                    [keyboard addSubview:dot];
    
                    // When the decimal button is pressed, we send a message to ourself (the AppDelegate) which will then post a notification that will then append a decimal in the UITextField in the Appropriate View Controller.
                    [dot addTarget:self action:@selector(sendDecimal:)  forControlEvents:UIControlEventTouchUpInside];
    
                    return;
                }
                else if (numberPadShowing && [keyboard viewWithTag:123])
                {
                    [keyboard bringSubviewToFront:dot];
                }
                else if (!numberPadShowing)
                {
    
                    for (UIView *v in [keyboard subviews]){
                        if ([v tag]==123)
                            [v removeFromSuperview];
                    }
                }
            }
        }
    }
    }
    
     - (void)sendDecimal:(id)sender {
    // The decimal was pressed
    
    }
    

    Hope that's clear.

    -Oscar

    0 讨论(0)
  • 2020-12-03 03:05

    Check this post, this could be your answer:

    UIKeyboardTypeNumberPad and the missing "return" key

    0 讨论(0)
提交回复
热议问题