UIResponder中的inputView与inputAccessoryView
前言
最近刚给app添加了类似QQ中“@”消息人的功能,其中主要是重写了UIResponder中的inputAccessoryView这个成员属性。关于inputView和inputAccessoryView的介绍和使用,我首先推荐俩篇个人认为很不错的辅助文档:开发者文档—-Custom Views for Data Input和博客—-UITextField docked like iOS Messenger。
属性介绍
inputView和inputAccessoryView是在UIResponder中定义的俩个readonly的属性。而且所有的UIKit中的控件都继承自UIResponder,定义这俩个属性,是为开发者改变系统键盘的视图提供便利。苹果SDK中提供了UITextView和UITextField俩种editor,而且都重定义了inputView和inputAccessoryView俩个属性为readwrite。
此外,我们也可以在自己定义的UIView的子类中,重定义这俩个属性。按照官方文档的说法,当inputView不是nil,而且inputView所属的UIView成为第一响应者时,系统就不会显示出键盘,而是显示我们自定义的inputView的值;当inputAccessoryView不是nil,而且inputAccessoryView所属的UIView成为第一响应者时,系统会显示键盘,并且在键盘的顶部显示出我们定义的inputAccessoryView。
触发显示
当我们点击一个UIView时,它就成为了第一响应者,我们还可以调用becomeFirstResponder让视图控件成为第一响应者。而在我们重定义inputView和inputAccessoryView的UIView中,我们也需要重写canBecomeFirstResponder这个方法,并且返回true,这样当我们的UIView成为第一响应者时,inputAccessoryView和inputView才会自动显示出来。
自定义显示
苹果SDK在iOS7中提供了UIInputView这个控件,并且在iOS8中提供了UIInputViewController这个视图控制器。这俩个是开发者可以很好地用来显示我们自定义的inputView和inputAccessoryView。UIInputView提供了UIInputViewStyleDefault和UIInputViewStyleKeyboard俩种显示形式,第二种会自动设置背景为系统键盘的背景。

