3 回答
TA贡献1831条经验 获得超10个赞
我认为您正在寻找的是“ 适用于iOS的文本,Web和编辑编程指南 ”
UIKit框架包括对自定义输入视图和输入附件视图的支持。当用户在视图中编辑文本或其他形式的数据时,您的应用程序可以用其自己的输入视图代替系统键盘。例如,应用程序可以使用自定义输入视图来输入来自符文字母的字符。您还可以在系统键盘或自定义输入视图上附加输入附件视图;该附件视图沿主输入视图的顶部运行,并且可以包含例如以某种方式影响文本的控件或显示有关文本的某些信息的标签。
如果您的应用程序使用UITextView和UITextField对象进行文本编辑,则要获得此功能,只需将自定义视图分配给inputView和inputAccessoryView属性。当文本对象成为第一响应者时,将显示这些自定义视图。
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;
TA贡献2080条经验 获得超4个赞
不幸的是,上面提到的“ iOS文本,Web和编辑编程指南”在按任何键后都没有提供有关如何处理字符的任何信息。到目前为止,这是在iOS中实现键盘时的难点。
我已经创建了一个十六进制数字键盘的完整工作示例,可以根据需要轻松地对其进行自定义。
- 3 回答
- 0 关注
- 594 浏览
添加回答
举报