UITextFieldをタップすると表示されるカスタムキーボード/キーパッドを作成するにはどうすればよいですか?私は、a、b、c、1、2、3とEnterボタンを備えたキーパッドを表示したいと思います。キーパッドは標準のキーボードと同じように機能し、動作するはずです(動作中)が、見た目は間違いなく異なります。
私は例を見つけることができず、私が見つけた最高の方法は、受け入れられない解決策である既存のキーボードで文字をフィルタリングすることです。
「 iOS用テキスト、Web、および編集プログラミングガイド 」を探していると思います
UIKitフレームワークには、カスタム入力ビューと入力アクセサリビューのサポートが含まれています。ユーザーがビュー内のテキストやその他の形式のデータを編集するとき、アプリケーションはシステムキーボードの代わりに独自の入力ビューを使用できます。たとえば、アプリケーションはカスタム入力ビューを使用して、ルーン文字の文字を入力できます。入力アクセサリビューをシステムキーボードまたはカスタム入力ビューに添付することもできます。このアクセサリビューはメイン入力ビューの上部に沿って実行され、たとえば、何らかの方法でテキストに影響を与えるコントロールや、テキストに関する情報を表示するラベルを含めることができます。
アプリケーションがテキスト編集にUITextViewおよびUITextFieldオブジェクトを使用している場合にこの機能を使用するには、inputViewおよびinputAccessoryViewプロパティにカスタムビューを割り当てるだけです。これらのカスタムビューは、テキストオブジェクトがファーストレスポンダーになったときに表示されます...
これは良い入門書として役立つかもしれません: iOSキーボードのカスタマイズ
Githubで Custom-iOS-Keyboards ライブラリを使用できます。
まず、ビューを作成します(別の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;
残念ながら、上記で参照した「iOS用のテキスト、Web、および編集プログラミングガイド」では、キーを押した後のキャラクターの対処方法に関する情報は提供されていません。これは、iOSでキーボードを実装する際のはるかに難しい部分です。
必要に応じて簡単にカスタマイズできる16進数のパッドの完全な実例を作成しました。
特定の詳細は、このテーマに関する他の回答にあります: https://stackoverflow.com/a/13351686/937822
値を設定したい
inputView
uITextFieldで。指定したビューに新しいキーボードまたは入力メカニズムを完全に実装する必要があります。
あるいは、
inputAccessoryView
少量の機能を追加するために使用できます。ビューはシステムキーボードの上に配置され、到着して閉じられます。