Iphone 如何创建自定义键盘

Iphone 如何创建自定义键盘,iphone,objective-c,ios,keyboard,Iphone,Objective C,Ios,Keyboard,如何创建一个自定义键盘/小键盘,当有人点击UITextField时,它会显示出来?我想显示一个带有a、b、c、1、2、3和一个回车按钮的键盘,没有其他功能。键盘应该像标准键盘一样工作和行为(在行为上),但它看起来肯定会有所不同 我找不到任何示例,我发现最好的方法是使用现有键盘过滤字符,这是一个不可接受的解决方案。我想您正在寻找“” UIKit框架包括对自定义输入视图和输入附件视图的支持。当用户在视图中编辑文本或其他形式的数据时,应用程序可以用自己的输入视图替换系统键盘。例如,应用程序可以使用自定

如何创建一个自定义键盘/小键盘,当有人点击UITextField时,它会显示出来?我想显示一个带有a、b、c、1、2、3和一个回车按钮的键盘,没有其他功能。键盘应该像标准键盘一样工作和行为(在行为上),但它看起来肯定会有所不同


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

我想您正在寻找“”

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

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



这可能是一个很好的介绍:

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

之后,我将其设置为要使用它的文本字段的输入视图(实际上,这是您问题的简短答案;):

单击该字段时,我会滚动视图pup(如有必要)以不覆盖该字段:

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;
不幸的是,上面提到的“iOS的文本、Web和编辑编程指南”并没有提供任何关于按下某个键后如何处理角色的信息。到目前为止,这是在iOS中实现键盘时最困难的部分

我已经创建了一个完整的十六进制数字广告工作的例子,可以很容易地定制像你需要的


具体细节见我关于这个问题的另一个答案:

您可以使用Github上的库。

您想为

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

或者

inputAccessoryView 

可用于添加少量功能。该视图将放置在系统键盘上方,并将随它一起到达和关闭。

此链接有一半的帮助。它告诉您创建自定义键盘的可能性以及文本接受类必须符合哪些类别才能接受自定义键盘的输入。。。但几乎没有告诉您如何构建自定义键盘本身。链接到一些示例代码将非常有用。@Robert,你说得对。我找不到答案就放弃了。如果您找到了解决方案,请告诉我。我提供了一个实现几个案例的基本示例,在这些案例中,您可能希望自定义输入视图,希望这会有所帮助。见更新的答案。乔纳的例子真的很棒。通过查看这些,我能够确定您可以简单地实例化UIView对象并将其分配给UITextField实例的inputView属性-如myTextField.inputView=[[UIView alloc]…];要覆盖键盘,这是一个完全无用的链接。我回答了一个非常类似的问题(在下面的回答中链接到:),它创建了一个自定义键盘。我将其开源,并将其放在Github上供所有人使用,最近还添加了一个带有十六进制键盘的示例。如果你只想要a-c和1-3,你只需要删除额外的按钮!伙计们,在这个问题上有任何改进,因为你们中的一些人已经做了一些研究(并且可能已经找到了一个解决方案),如果你发现了一些有用的东西,请发帖子…。
inputView
inputAccessoryView