iOS8新特性擴充(Extension)應用之四——自定義鍵盤控件
iOS8系統的開放第三方鍵盤,使得使用者在輸入法的選擇上更加自主靈活,也更加貼近不同語言的輸入風格。這篇部落格,将介紹如何開發一個第三方的鍵盤控件。
一、了解UIInputViewController類
UIInputViewController是系統擴充支援鍵盤擴充的一個類,通過這個類,我們可以自定義一款我們自己的鍵盤提供給系統使用。
首先,我們先來看一下這個類中的一些屬性和方法:
@property (nonatomic, retain) UIInputView *inputView;
鍵盤的輸入視圖,我們可以自定義這個視圖。
@property (nonatomic, readonly) NSObject <UITextDocumentProxy> *textDocumentProxy;
實作了UITextDocumentProxy協定的一個對象,後面會介紹這個協定。
@property (nonatomic, copy) NSString *primaryLanguage;
系統為我們準備了一些本地化的語言字元串
- (void)dismissKeyboard;
收鍵盤的方法
- (void)advanceToNextInputMode;
切換到下一輸入法的方法
UITextDocumentProxy協定内容如下:
@protocol UITextDocumentProxy <UIKeyInput>
//輸入的上一個字元
@property (nonatomic, readonly) NSString *documentContextBeforeInput;
//即将輸入的一個字元
@property (nonatomic, readonly) NSString *documentContextAfterInput;
//将輸入的字元移動到某一位置
- (void)adjustTextPositionByCharacterOffset:(NSInteger)offset;
@end
而UITextDocumentProxy這個協定繼承與UIKeyInput協定,UIKeyInput協定中提供的兩個方法用于輸入字元和删除字元:
- (void)insertText:(NSString *)text;
- (void)deleteBackward;
二、建立一款最簡單的數字輸入鍵盤
建立一個項目,作為宿主APP,接着我們File->new->target->customKeyBoard:
系統要求我們對鍵盤的布局要使用autolayout,并且隻可以采用代碼布局的方式,我們這裡為了簡單示範,将坐标寫死:
- (void)viewDidLoad {
[super viewDidLoad];
// 設定數字鍵盤的UI
//數字按鈕布局
for (int i=0; i<10; i++) {
UIButton * btn = [UIButton buttonWithType:UIButtonTypeSystem];
btn.frame=CGRectMake(20+45*(i%3), 20+45*(i/3), 40, 40);
btn.backgroundColor=[UIColor greenColor];
[btn setTitle:[NSString stringWithFormat:@"%d",i] forState:UIControlStateNormal];
btn.tag=101+i;
[btn addTarget:self action:@selector(click:) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:btn];
}
//建立切換鍵盤按鈕
UIButton * change = [UIButton buttonWithType:UIButtonTypeSystem];
change.frame=CGRectMake(200,20, 80, 40) ;
NSLog(@"%f,%f",self.view.frame.size.height,self.view.frame.size.width);
[change setBackgroundColor:[UIColor blueColor]];
[change setTitle:@"切換鍵盤" forState:UIControlStateNormal];
[change addTarget:self action:@selector(change) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:change];
//建立删除按鈕
UIButton * delete = [UIButton buttonWithType:UIButtonTypeSystem];
delete.frame=CGRectMake(200, 120, 80, 40);
[delete setTitle:@"delete" forState:UIControlStateNormal];
[delete setBackgroundColor:[UIColor redColor]];
[delete addTarget:self action:@selector(delete) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:delete];
}
//删除方法
-(void)delete{
if (self.textDocumentProxy.documentContextBeforeInput) {
[self.textDocumentProxy deleteBackward];
//切換鍵盤方法
-(void)change{
[self advanceToNextInputMode];
//點選數字按鈕 将相應數字輸入
-(void)click:(UIButton *)btn{
[self.textDocumentProxy insertText:[NSString stringWithFormat:@"%ld",btn.tag-101]];
運作後,在使用之前,我們需要先加入這個鍵盤:在模拟器系統設定中general->keyboard->keyboards->addNowKeyboard
選中我們自定義的鍵盤,之後運作浏覽器,切換到我們的鍵盤,效果如下: