2011-01-10 9 views
55

UITextFieldでタップしたときに表示されるカスタムキーボード/キーパッドを作成するにはどうすればよいですか?私はa、b、c、1、2、3とEnterボタン、それ以外はキーパッドを表示したいと思います。キーパッドは標準的なキーボードのように動作し、動作するはずですが(動作時)、それは間違いなく見えます。カスタムキーボードの作成方法

私が見つけたことはありません。私が見つけたベストは、許容できない解決策である既存のキーボードで文字をフィルタリングすることです。

+0

私は非常によく似た質問に答えました(以下の私の答えにリンクしています:http://stackoverflow.com/a/13351686/937822)。私はそれをオープンソースにしてGithubにすべてのものを載せるようにし、最近になって六角キーパッドを使った例を追加しました。 a-cと1-3だけが必要な場合は、余分なボタンを削除するだけです! – lnafziger

答えて

38

は、私はあなたが「Text, Web, and Editing Programming Guide for iOS

UIKitフレームワークを探しているカスタム入力ビューと入力アクセサリビューのサポートが含まれていると思います。ビュー内のテキストや他の形式のデータを編集するときには、システムキーボードの入力ビューをアプリケーションに置き換えることができます。たとえば、アプリケーションでカスタム入力ビューを使用してルーン文字の文字を入力することができます。また、入力アクセサリビューをシステムキーボードまたはカスタム入力ビューに添付することもできます。このアクセサリビューは、メイン入力ビューの上部に沿って実行され、テキストに何らかの形で影響するコントロールや、テキストに関する情報を表示するラベルなどを含めることができます。

アプリケーションでUITextViewおよびUITextFieldオブジェクトをテキスト編集に使用している場合は、inputViewおよびinputAccessoryViewプロパティにカスタムビューを割り当てるだけです。テキストオブジェクトがファーストレスポンダになったときに、これらのカスタムビューは、これは良い入門となる恐れがあります


...示されています。すべてのcustomizing the iOS keyboard

+1

このリンクは半分役立ちます。カスタムキーボードを作成する方法と、カスタムキーボードからの入力を受け入れるためにテキスト受け入れクラスが準拠しなければならないカテゴリについて説明しますが、カスタムを構築する方法についてはほとんど何も教えてくれませんキーボード自体。いくつかのサンプルコードへのリンクは非常に便利です。 –

+0

@ロベルト、そうです。私は答えを見つけられず、あきらめました。あなたが解決策を見つけたら教えてください。 – HM1

+2

入力ビューをカスタマイズしたい場合の2つのケースを実装する基本的な例をまとめました。うまくいけばそれは助けになるでしょう。更新された回答をご覧ください。 – Jonah

3

まずビューを作成します(私は別々にそれをやりましたnibファイルとは、それをこのように)ロード:

NSArray *views = [[NSBundle mainBundle] loadNibNamed:@"ReducedNumericKeyboardView" 
                owner:self 
               options:nil]; 
    keyBView = (ReducedNumericKeyboardView*)[views objectAtIndex:0]; 

それの後、私はそれを(使用したいと実際に、これはあなたの質問への短い答えは、テキストフィールドの入力ビューとして設定します。)) :

[self.propertyEditor setInputView:keyBView]; 
私は、フィールドをカバーしていないために(必要な場合)、ビュー子犬をスクロール行うフィールドにクリック:

CGRect textFieldRect = [self.tableViewController.view.window convertRect:propertyEditor.bounds fromView:propertyEditor]; 
CGRect viewRect = [self.tableViewController.view.window convertRect:self.tableViewController.view.bounds fromView:self.tableViewController.view]; 
CGFloat midLine = textFieldRect.origin.y+.5*textFieldRect.size.height; 

CGFloat numerator = midLine - viewRect.origin.y - MINIMUM_SCROLL_FRACTION*viewRect.size.height; 
CGFloat denominator = (MAXIMUM_SCROLL_FRACTION - MINIMUM_SCROLL_FRACTION)*viewRect.size.height; 
CGFloat heightFraction = MIN(1, MAX(0, numerator/denominator)); 

animateDistance = floor(PORTRAIT_USER_INPUT_VIEW_HEIGHT*heightFraction); 

CGRect viewFrame = self.tableViewController.view.frame; 
viewFrame.origin.y -= animateDistance; 
[UIView beginAnimations:nil context:NULL]; 
[UIView setAnimationBeginsFromCurrentState:YES]; 
[UIView setAnimationDuration:USER_INPUT_ANIMATION_DURATION]; 
[self.tableViewController.view setFrame:viewFrame]; 
[UIView commitAnimations]; 

編集が終了したら、私はビューをスクロールダウン行います

私は次のように設定されている使用
 CGRect viewFrame = self.tableViewController.view.frame; 
     viewFrame.origin.y += animateDistance; 
     [UIView beginAnimations:nil context:NULL]; 
     [UIView setAnimationBeginsFromCurrentState:YES]; 
     [UIView setAnimationDuration:USER_INPUT_ANIMATION_DURATION]; 
     [self.tableViewController.view setFrame:viewFrame]; 
     [UIView commitAnimations]; 

制約:

static const CGFloat USER_INPUT_ANIMATION_DURATION = 0.3; 
static const CGFloat PORTRAIT_USER_INPUT_VIEW_HEIGHT = 180; 

static const CGFloat MINIMUM_SCROLL_FRACTION = 0.1; 
static const CGFloat MAXIMUM_SCROLL_FRACTION = 0.2; 
+0

何人かの研究者が解決策を見つけた可能性がありますので、何か有益な情報があれば投稿してください。 –

2

残念ながら、上記の「テキスト、Web、および編集用のiOS向けプログラミングガイド」では、キーを押すと文字の処理に関する情報は提供されません。これは、iOSでキーボードを実装するときは難しい部分です。

私は、必要に応じて簡単にカスタマイズできる16進数値パッドの完全な実例を作成しました。 https://stackoverflow.com/a/13351686/937822

5

あなたはGitHubの上Custom-iOS-Keyboardsライブラリを使用することができます。

具体的な詳細は、このテーマに関する私の他の答えです。

2

あなたのUITextFieldに

inputView 

の値を設定します。あなたが提供するビューに新しいキーボードや入力メカニズムを完全に実装する必要があります。

あるいは、

inputAccessoryView 

、機能の少量を追加するために使用することができます。ビューはシステムのキーボードの上に置かれ、それが到着して解読されます。

関連する問題