很简陋的demo,主要是实现了自定制键盘的具体思路,里边具体“按键”要自己实现。下面只实现了对textField的键盘监控,textView的键盘是一样的。先看看效果吧:
设计模式:单例
#import <UIKit/UIKit.h>
@interface CKeyboardView : UIView
+ (CKeyboardView *)shareInstance;
@end
因此,我们完成了第一步:
textField.inputView = [CKeyboardView shareInstance];
第二步,怎么捕捉到当前输入的textField呢?
我们可以获取当前的第一响应者:
然而,这个方法是Apple私有的,如果使用了,上架会被拒!
UIWindow *keyWindow = [[UIApplication sharedApplication] keyWindow];
UIView *firstResponder = [keyWindow performSelector:@selector(firstResponder)];
因此,我采用了第二种方式获取,即:
#import <UIKit/UIKit.h>
@interface UIResponder (FirstResponder)
//使用时只需要对UIResponder类调用该类方法即可获得当前第一响应者
+ (id)getFirstResponder;
@end
那么,textField需要自己特定的键盘类型,比如数字、电话、邮件等等,textField本身有keyboardType属性,当然我们也可以通过为它增加我们自定制键盘特制的属性,这里用到了runTime。
#import <UIKit/UIKit.h>
typedef enum : NSUInteger {
CustomKeyboardTypeNormal, // 默认就Normal
CustomKeyboardTypeNumber, // 数字键盘
} CustomKeyboardType;
@interface UITextField (CKeyboardType)
// 自定制键盘类型
@property (nonatomic,assign) CustomKeyboardType customKeyboardType;
@end
最后,我们在CKeyboardView对键盘进行监控,得到引起键盘弹起的第一响应者textField,然后我们就可以显示出相应的键盘款式。
这个demo在github上,点击可以查看下载。