iOS8系統的開放第三方鍵盤,使得用戶在輸入法的選擇上更加自主靈活,也更加貼近不一樣語言的輸入風格。這篇博客,將介紹如何開發一個第三方的鍵盤控件。瀏覽器
UIInputViewController是系統擴展支持鍵盤擴展的一個類,經過這個類,咱們能夠自定義一款咱們本身的鍵盤提供給系統使用。ide
首先,咱們先來看一下這個類中的一些屬性和方法:佈局
@property (nonatomic, retain) UIInputView *inputView;atom
鍵盤的輸入視圖,咱們能夠自定義這個視圖。spa
@property (nonatomic, readonly) NSObject <UITextDocumentProxy> *textDocumentProxy;.net
實現了UITextDocumentProxy協議的一個對象,後面會介紹這個協議。code
@property (nonatomic, copy) NSString *primaryLanguage;orm
系統爲咱們準備了一些本地化的語言字符串對象
- (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
選中咱們自定義的鍵盤,以後運行瀏覽器,切換到咱們的鍵盤,效果以下:
專一技術,熱愛生活,交流技術,也作朋友。
——琿少 QQ羣:203317592