TextKit框架详细解析 (十一) —— 文本编程指南之输入数据的自定义视图(七)

版本记录

版本号 时间
V1.0 2018.09.01

前言

TextKit框架是对Core Text的封装,用简洁的调用方式实现了大部分Core Text的功能。 TextKit是一个偏上层的开发框架,在iOS7以上可用,使用它可以方便灵活处理复杂的文本布局,满足开发中对文本布局的各种复杂需求。TextKit实际上是基于CoreText的一个上层框架,其是面向对象的。接下来几篇我们就一起看一下这个框架。感兴趣的看下面几篇文章。
1. TextKit框架详细解析 (一) —— 基本概览和应用场景(一)
2. TextKit框架详细解析 (二) —— 基本概览和应用场景(二)
3. TextKit框架详细解析 (三) —— 一个简单布局示例(一)
4. TextKit框架详细解析 (四) —— 一个简单布局示例(二)
5. TextKit框架详细解析 (五) —— 文本编程指南之简介(一)
6. TextKit框架详细解析 (六) —— 文本编程指南之展示文本内容(二)
7. TextKit框架详细解析 (七) —— 文本编程指南之排版概念(三)
8. TextKit框架详细解析 (八) —— 文本编程指南之管理Text Fields and Text Views(四)
9. TextKit框架详细解析 (九) —— 文本编程指南之管理键盘(五)
10. TextKit框架详细解析 (十) —— 文本编程指南之复制、剪切和粘贴操作(六)

Custom Views for Data Input - 输入数据的自定义视图

UIKit允许应用程序替换系统键盘的自定义输入视图。 它还使应用程序在系统键盘或自定义输入视图上方具有附件视图。 此外,当用户点击输入视图或输入附件视图的控件时,它使应用程序能够播放按键点击声音。


Input Views and Input Accessory Views - 输入视图和输入附件视图

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

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

您不仅限于框架提供的文本对象中的输入视图和输入附件视图。直接或间接从UIResponder继承的任何类(通常是自定义视图)都可以指定自己的输入视图和输入附件视图。 UIResponder类为输入视图和输入附件视图声明了两个属性:

@property (readonly, retain) UIView *inputView;
@property (readonly, retain) UIView *inputAccessoryView;

当响应者对象成为第一个响应者并且inputView(或inputAccessoryView)不是nil时,UIKit将输入视图设置为在父视图下方的位置(或将输入附件视图附加到输入视图的顶部)。第一个响应者可以通过调用UIResponder的reloadInputViews方法重新加载输入和附件视图。

UITextView类将inputView和inputAccessoryView属性重新声明为readwrite。 UITextView对象的客户端只需要获取输入和输入附件视图 - 通过加载nib文件或在代码中创建视图 - 并将它们分配给它们的属性。自定义视图类(以及从UIResponder继承的其他子类)应重新声明这些属性及其后备实例变量中的一个或两个,并重写属性的getter方法 - 即,不合成属性的访问器方法。在他们的getter-method实现中,他们应该返回视图,如果它还不存在则加载或创建它。

您可以在定义输入视图或输入附件视图的大小和内容方面具有很大的灵活性。虽然这些视图的高度可以是您想要的,但它们应该与系统键盘的宽度相同。如果UIKit在其自动调整掩码中遇到具有UIViewAutoresizingFlexibleHeight值的输入视图,则会更改高度以匹配键盘。输入视图和输入附件视图可能具有的子视图(例如控件)的数量没有限制。有关输入视图和输入附件视图的更多指导,请参阅iOS Human Interface Guidelines

要在运行时加载nib文件,首先在Interface Builder中创建输入视图或输入附件视图。然后在运行时获取应用程序的主包并调用loadNibNamed:owner:options:,传递nib文件的名称,nib文件的文件所有者以及任何选项。此方法返回nib中顶级对象的数组,其中包括输入视图或输入附件视图。将视图分配给其对应的属性。有关此主题的更多信息,请参阅Resource Programming Guide中的Nib Files。

Listing 6-1说明了一个自定义视图类,它在inputAccessoryView的 getter方法中懒创建其输入附件视图。

// Listing 6-1  Creating an input accessory view programmatically

- (UIView *)inputAccessoryView {
    if (!inputAccessoryView) {
        CGRect accessFrame = CGRectMake(0.0, 0.0, 768.0, 77.0);
        inputAccessoryView = [[UIView alloc] initWithFrame:accessFrame];
        inputAccessoryView.backgroundColor = [UIColor blueColor];
        UIButton *compButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
        compButton.frame = CGRectMake(313.0, 20.0, 158.0, 37.0);
        [compButton setTitle: @"Word Completions" forState:UIControlStateNormal];
        [compButton setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
        [compButton addTarget:self action:@selector(completeCurrentWord:)
            forControlEvents:UIControlEventTouchUpInside];
        [inputAccessoryView addSubview:compButton];
    }
    return inputAccessoryView;
}

输入视图和输入附件视图的子视图可以是您想要的任何内容。 如果它们是按钮或其他控件,则需要为每个控件指定目标和操作,并实现相关的操作方法以执行数据输入或操作。

正如它与系统键盘一样,UIKit发布了UIKeyboardWillShowNotification,UIKeyboardDidShowNotification,UIKeyboardWillHideNotification和UIKeyboardDidHideNotification通知。 观察这些通知的对象可以获得与输入视图和输入附件视图相关的几何信息,并相应地调整编辑的视图。 有关示例和相关信息,请参阅Keyboards and Input Methods。


Playing Input Clicks

当用户点击自定义输入视图和键盘附件视图时,您可以播放标准系统键盘点击。 首先,在输入视图中采用UIInputViewAudioFeedback协议。 然后,在响应视图中的键击时调用playInputClick方法。

1. Adopting the UIInputViewAudioFeedback Protocol - 采取UIInputViewAudioFeedback协议

执行以下三个步骤以采用UIInputViewAudioFeedback协议:

  • 1)在Xcode项目中,创建UIView类的子类。 在头文件中,指示子类符合UIInputViewAudioFeedback协议,如下所示:
@interface KeyboardAccessoryView:UIView  {
}
  • 2)在UIView子类的实现文件中,实现enableInputClicksWhenVisible方法,如下所示:
- (BOOL)enableInputClicksWhenVisible {
     返回YES;
}
  • 3)最后,在自定义输入或附件视图的Interface Builder文档中,选择View对象。 在Identity检查器中,将对象的类设置为UIView子类。

2. Playing Input Clicks - 进行输入播放点击

要在自定义输入或键盘附件视图中点击按键,请首先确保视图采用UIInputViewAudioFeedback协议,如Adopting the UIInputViewAudioFeedback Protocol中所述。 然后,对于要为其提供单击声音的每个tap,请调用UIDevice类的playInputClick方法,如下所示:

- (void)playClickForCustomKeyTap {
    [[UIDevice currentDevice] playInputClick];
}

系统自动管理音频会话以进行自定义输入点击,包括根据需要进行audio ducking。 (有关音频会话的信息,请参阅Audio Session Programming Guide。)

后记

本篇主要讲述了输入数据的自定义视图,感兴趣的给个赞或者关注~~~

你可能感兴趣的:(TextKit框架详细解析 (十一) —— 文本编程指南之输入数据的自定义视图(七))