如何创建自定义键盘/键盘,当有人点击UITextField时会显示?我想显示一个键盘,其中包含a,b,c,1,2,3和一个输入按钮,没有别的。键盘应该像标准键盘一样工作和行为(在行为上),但它肯定会有所不同。
我找不到任何示例,我发现最好的是使用现有键盘过滤字符,这是一种不可接受的解决方案。
答案 0 :(得分:38)
我认为你正在寻找“Text, Web, and Editing Programming Guide for iOS”
UIKit框架包括对自定义输入视图和输入附件视图的支持。当用户在视图中编辑文本或其他形式的数据时,您的应用程序可以用自己的输入视图替换系统键盘。例如,应用程序可以使用自定义输入视图从符文字母表中输入字符。您还可以将输入附件视图附加到系统键盘或自定义输入视图;此附件视图沿主输入视图的顶部运行,并且可以包含,例如,以某种方式影响文本的控件或显示有关文本的一些信息的标签。
如果您的应用程序使用UITextView和UITextField对象进行文本编辑,要获得此功能,只需将自定义视图分配给inputView和inputAccessoryView属性即可。当文本对象成为第一响应者时,将显示这些自定义视图...
这可能是一个很好的介绍:customizing the iOS keyboard
答案 1 :(得分:5)
您可以在Github上使用Custom-iOS-Keyboards库。
答案 2 :(得分:3)
首先创建一个视图(我在一个单独的nib文件中完成并以这种方式加载它):
NSArray *views = [[NSBundle mainBundle] loadNibNamed:@"ReducedNumericKeyboardView"
owner:self
options:nil];
keyBView = (ReducedNumericKeyboardView*)[views objectAtIndex:0];
之后,我将其设置为我想要使用它的文本字段的输入视图(实际上,这是您问题的简短答案;)):
[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;
答案 3 :(得分:2)
不幸的是,上面引用的“文本,Web和编辑iOS编程指南”没有提供任何关于如何在按键时对角色做什么的信息。在iOS中实现键盘时,这是迄今为止最难的部分。
我已经创建了一个十六进制数字键盘的完整工作示例,可以根据需要轻松定制。
具体细节是关于此主题的另一个答案:https://stackoverflow.com/a/13351686/937822
答案 4 :(得分:2)
您想要设置
的值inputView
在您的UITextField上。您需要在您提供的视图中完全实现新的键盘或输入机制。
可替换地,
inputAccessoryView
可用于添加少量功能。该视图将被放置在系统键盘上方,并将随之被解除。