如何创build自定义键盘

如何创build一个自定义的键盘/键盘,当有人在UITextField上点击时会显示出来? 我想显示一个小键盘与a,b,c,1,2,3和一个inputbutton,没有别的。 键盘应该工作和行为像标准键盘(行为),但一定会看起来不同。

我找不到任何例子,我发现最好的是用现有的键盘过滤字符,这是一个不可接受的解决scheme。

我认为你正在寻找“用于iOS的文本,Web和编辑编程指南 ”

UIKit框架包括对自定义input视图和input附件视图的支持。 用户在视图中编辑文本或其他forms的数据时,您的应用程序可以将其自己的input视图replace为系统键盘。 例如,应用程序可以使用自定义input视图来input符文字母表中的字符。 您也可以将input附件视图附加到系统键盘或自定义input视图; 此附件视图沿主input视图的顶部运行,并且可以包含(例如)以某种方式影响文本的控件或显示有关文本的某些信息的标签。

要获得此function,如果您的应用程序正在使用UITextView和UITextField对象进行文本编辑,只需将自定义视图分配给inputView和inputAccessoryView属性即可。 当文本对象成为第一响应者时显示这些自定义视图…


这可以作为一个很好的介绍: 自定义iOS键盘

你可以使用Github上的Custom-iOS-Keyboards库。

首先创build一个视图(我在一个单独的nib文件中完成,并以这种方式加载):

NSArray *views = [[NSBundle mainBundle] loadNibNamed:@"ReducedNumericKeyboardView" owner:self options:nil]; keyBView = (ReducedNumericKeyboardView*)[views objectAtIndex:0]; 

之后,我把它设置为我想要使用它的文本字段的input视图(实际上,这是对你的问题的简短回答;)):

  [self.propertyEditor setInputView:keyBView]; 

当点击字段时,我会滚动查看小狗(如果有必要)不覆盖该字段:

 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]; 

编辑完成后,我将向下滚动视图:

  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]; 

我使用的约束条件如下:

 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; 

您要为其设置值

 inputView 

在你的UITextField上。 您需要在您提供的视图中完全实现新的键盘或input机制。

交替,

 inputAccessoryView 

可以用来添加less量的function。 该视图将被放置在系统键盘的上方,并将抵达并被解散。

不幸的是,上面引用的“用于iOS的文本,Web和编辑编程指南”没有提供任何有关如何处理字符的信息。 这是在iOS中实现键盘时最困难的部分。

我已经创build了一个hex数字键盘的完整工作示例,可以轻松地按照您的需要进行自定义。

具体细节在我的这个问题上的其他答案: https : //stackoverflow.com/a/13351686/937822