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

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

        iOS8系統的開放第三方鍵盤,使得用戶在輸入法的選擇上更加自主靈活,也更加貼近不一樣語言的輸入風格。這篇博客,將介紹如何開發一個第三方的鍵盤控件。瀏覽器

1、瞭解UIInputViewController類

        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;

2、建立一款最簡單的數字輸入鍵盤

        建立一個項目,做爲宿主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

相關文章
相關標籤/搜索