Przede wszystkim utworzyć widok (zrobiłem to w oddzielnym plik stalówka i załadowany to w ten sposób):
NSArray *views = [[NSBundle mainBundle] loadNibNamed:@"ReducedNumericKeyboardView"
owner:self
options:nil];
keyBView = (ReducedNumericKeyboardView*)[views objectAtIndex:0];
Po nim, ustawić go jako widok wejścia do pola tekstowego, gdzie chcę go (w użyciu i faktycznie, jest to krótka odpowiedź na pytanie;)) :
[self.propertyEditor setInputView:keyBView];
po kliknięciu w pole i zrobić przewijać widok szczenię (jeśli to konieczne), aby nie pokrywać murawę:
CGRect textFieldRect = [self.tableViewController.view.window convertRect:propertyEditor.bounds fromView:propertyEditor];
CGRect viewRect = [self.tableViewController.view.window convertRect:self.tableViewController.view.bounds fromView:self.tableViewController.view];
CGFloat midLine = textFieldRect.origin.y+.5*textFieldRect.size.height;
CGFloat numerator = midLine - viewRect.origin.y - MINIMUM_SCROLL_FRACTION*viewRect.size.height;
CGFloat denominator = (MAXIMUM_SCROLL_FRACTION - MINIMUM_SCROLL_FRACTION)*viewRect.size.height;
CGFloat heightFraction = MIN(1, MAX(0, numerator/denominator));
animateDistance = floor(PORTRAIT_USER_INPUT_VIEW_HEIGHT*heightFraction);
CGRect viewFrame = self.tableViewController.view.frame;
viewFrame.origin.y -= animateDistance;
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationBeginsFromCurrentState:YES];
[UIView setAnimationDuration:USER_INPUT_ANIMATION_DURATION];
[self.tableViewController.view setFrame:viewFrame];
[UIView commitAnimations];
Podczas edycji zakończeniu zrobić przewinąć widok w dół:
CGRect viewFrame = self.tableViewController.view.frame;
viewFrame.origin.y += animateDistance;
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationBeginsFromCurrentState:YES];
[UIView setAnimationDuration:USER_INPUT_ANIMATION_DURATION];
[self.tableViewController.view setFrame:viewFrame];
[UIView commitAnimations];
ograniczenia używam są ustawione w następujący sposób:
static const CGFloat USER_INPUT_ANIMATION_DURATION = 0.3;
static const CGFloat PORTRAIT_USER_INPUT_VIEW_HEIGHT = 180;
static const CGFloat MINIMUM_SCROLL_FRACTION = 0.1;
static const CGFloat MAXIMUM_SCROLL_FRACTION = 0.2;
Odpowiedziałem na bardzo podobne pytanie (link w mojej odpowiedzi poniżej: http://stackoverflow.com/a/13351686/937822), który tworzy niestandardową klawiaturę. Zrobiłem to open source i umieściłem na Githubu, aby wszyscy mogli go używać, a ostatnio dodałem przykład z sześciokąta. Jeśli chcesz tylko a-c i 1-3, po prostu musisz usunąć dodatkowe przyciski! – lnafziger