天天看點

iOS8新特性擴充(Extension)應用之四——自定義鍵盤控件iOS8新特性擴充(Extension)應用之四——自定義鍵盤控件

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:

iOS8新特性擴充(Extension)應用之四——自定義鍵盤控件iOS8新特性擴充(Extension)應用之四——自定義鍵盤控件

系統要求我們對鍵盤的布局要使用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

選中我們自定義的鍵盤,之後運作浏覽器,切換到我們的鍵盤,效果如下:

iOS8新特性擴充(Extension)應用之四——自定義鍵盤控件iOS8新特性擴充(Extension)應用之四——自定義鍵盤控件

繼續閱讀