pixyzehn blog

iPhone App, Mac App, Programming, Web service, Tool, Evernote, etc

iOSアプリでカスタムキーボードを作成する

f:id:inagex:20140329185641p:plain
by ios app 支出管理


iOSアプリの開発をしていてデフォルトではなくオリジナルのキーボードを作成したいときがあったのでその作り方をメモっておきます。


いろんなやり方があったりもっといいやり方があると思いますが、ひとつのやり方として参考にして頂ければと思います。


おもにこちらを参考にしました。


http://works.sabitori.com/2011/07/12/custom_keyboard/


まずはUITextFieldクラスを継承して、カスタムテキストフィールドクラスを作ります。(CustomTextFieldとした)


CustomTextField.h

#import <UIKit/UIKit.h>

@interface CustomTextField : UITextField

@end


CustomTextField.m

#import "CustomTextField.h"
#import "CustomKeyboard.h"

@implementation CustomTextField

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code
    }
    return self;
}

- (UIView *)inputView {
    
CustomKeyboard *vc = [[[NSBundle mainBundle] loadNibNamed:@"CustomKeyboard" owner:self options:nil] objectAtIndex:0];

return vc;
}


次にIBでUITextFieldを配置してクラスを指定します。


f:id:inagex:20140329190217p:plain


次にまずはUIViewを継承して、キーボードのViewを作ります。(CustomKeyboardとした)


CustomKeyboard.h

#import <UIKit/UIKit.h>

@interface CustomKeyboard : UIView

@end


CustomKeyboard.m

#import "CustomKeyboard.h"

@implementation CustomKeyboard

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code
    }
    return self;
}

@end


ここでは新規ファイル作成>User Interface>Emptyを選択し、CustomKeyboard.xibというxibファイルを作成します。


このxibファイルにUIViewを設置して、UIButtonなどをキーボードとして配置していくと以下のようになります。


f:id:inagex:20140329190613p:plain


UIViewのサイズはSizeをFreeformにすることで変更でき、


f:id:inagex:20140329190707p:plain


width:320,height:290ぐらいでちょうどいいと思います。


CustomClassとIdentifyは忘れないように記載しておきます。


f:id:inagex:20140329190852p:plain


これで表示されたTextFieldをタップすると先ほど作ったキーボードが下から出てくると思います。


f:id:inagex:20140329191043p:plain


これで後は各々のボタンがタップされたら、UITextFieldに記入していけばよいですね。その際はTagとかを有効に使えばいいのかと思います。


金額などを記入するアプリでは数多くオリジナルのキーボードが利用されていると感じました。


参考サイト


http://works.sabitori.com/2011/07/12/custom_keyboard/


http://forums.macrumors.com/showthread.php?t=749544