2010-02-16 2 views
0

Если у кого-то есть приложение GymBuddy, тогда они узнают, о чем я говорю. Они, похоже, используют клавиатуру с клавиатурой Stock Pad, но добавили «.». в нижнем левом углу, а также в верхней панели, чтобы перейти к альфа-символам. Кто-нибудь знает как это сделать? Делаю ли я новое представление, подобное клавиатуре, и подтягиваю его, а кнопки соответствуют текстовому полю для ввода? Я не могу найти никакой информации о настройке клавиатуры или создании вашей собственной. СпасибоСоздание пользовательского UIKeyBoard для iPhone

ответ

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

Большое спасибо, я попробую это, когда я прихожу домой –

Смежные вопросы