为了账号安全,请及时绑定邮箱和手机立即绑定

如何创建自定义键盘

如何创建自定义键盘

iOS
繁星淼淼 2019-10-09 15:06:30
我该如何创建一个自定义键盘/小键盘,当某个用户在UITextField上点击时会显示该键盘/小键盘?我想显示一个带有a,b,c,1、2、3和回车按钮的小键盘。键盘的工作方式和行为应与标准键盘相同(行为上一样),但外观肯定会有所不同。我找不到任何示例,发现的最好的方法是使用现有键盘过滤字符,这是不可接受的解决方案。
查看完整描述

3 回答

?
慕哥6287543

TA贡献1831条经验 获得超10个赞

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


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


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



查看完整回答
反对 回复 2019-10-09
?
波斯汪

TA贡献1811条经验 获得超4个赞

首先创建一个视图(我在一个单独的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;


查看完整回答
反对 回复 2019-10-09
?
犯罪嫌疑人X

TA贡献2080条经验 获得超4个赞

不幸的是,上面提到的“ iOS文本,Web和编辑编程指南”在按任何键后都没有提供有关如何处理字符的任何信息。到目前为止,这是在iOS中实现键盘时的难点。


我已经创建了一个十六进制数字键盘的完整工作示例,可以根据需要轻松地对其进行自定义。


查看完整回答
反对 回复 2019-10-09
  • 3 回答
  • 0 关注
  • 594 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信