文章目录
  1. 1. 前言
  2. 2. 属性介绍
  3. 3. 触发显示
  4. 4. 自定义显示

前言

最近刚给app添加了类似QQ中“@”消息人的功能,其中主要是重写了UIResponder中的inputAccessoryView这个成员属性。关于inputViewinputAccessoryView的介绍和使用,我首先推荐俩篇个人认为很不错的辅助文档:开发者文档—-Custom Views for Data Input博客—-UITextField docked like iOS Messenger

属性介绍

inputViewinputAccessoryView是在UIResponder中定义的俩个readonly的属性。而且所有的UIKit中的控件都继承自UIResponder,定义这俩个属性,是为开发者改变系统键盘的视图提供便利。苹果SDK中提供了UITextViewUITextField俩种editor,而且都重定义了inputViewinputAccessoryView俩个属性为readwrite

此外,我们也可以在自己定义的UIView的子类中,重定义这俩个属性。按照官方文档的说法,当inputView不是nil,而且inputView所属的UIView成为第一响应者时,系统就不会显示出键盘,而是显示我们自定义的inputView的值;当inputAccessoryView不是nil,而且inputAccessoryView所属的UIView成为第一响应者时,系统会显示键盘,并且在键盘的顶部显示出我们定义的inputAccessoryView

触发显示

当我们点击一个UIView时,它就成为了第一响应者,我们还可以调用becomeFirstResponder让视图控件成为第一响应者。而在我们重定义inputViewinputAccessoryView的UIView中,我们也需要重写canBecomeFirstResponder这个方法,并且返回true,这样当我们的UIView成为第一响应者时,inputAccessoryViewinputView才会自动显示出来。

自定义显示

苹果SDK在iOS7中提供了UIInputView这个控件,并且在iOS8中提供了UIInputViewController这个视图控制器。这俩个是开发者可以很好地用来显示我们自定义的inputViewinputAccessoryViewUIInputView提供了UIInputViewStyleDefaultUIInputViewStyleKeyboard俩种显示形式,第二种会自动设置背景为系统键盘的背景。

文章目录
  1. 1. 前言
  2. 2. 属性介绍
  3. 3. 触发显示
  4. 4. 自定义显示