2010-02-16 126 views
0

如果任何人有應用程序GymBuddy,那麼他們會知道我在說什麼。他們似乎使用股票數字鍵盤鍵盤,但添加了「。」。左下角的按鈕以及頂部的橫條切換到字母字符。有誰知道如何做到這一點?我是否可以像鍵盤一樣創建一個新視圖並將其拉出,並使按鈕與輸入的textField相對應?我似乎無法找到有關自定義鍵盤或創建自己的任何信息。謝謝爲iPhone創建自定義UIKeyBoard

回答

5

我已經這樣做了。基本上你可以像這樣添加你自己的按鈕作爲UIKeyboard的子視圖:

// 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 

} 

希望很清楚。

-Oscar

+1

非常感謝你,當我回家,我會嘗試了這一點 –