アプリにカスタム キーボードを実装しています。キーボードを複数の「タイプ」のテキストフィールドに適用できるようにしたい(すべて数値ですが、負の値と厳密に正の値、整数と小数の値を持つものもあります)。textField の「タイプ」に応じて 1 つまたは 2 つのボタンを非表示にすることで、これを実現したいと考えています。
キーボードを作成し、textFields (xValue) のいずれかの inputView として割り当てることができます。また、入力として整数を受け取り、キーボード ボタンを変更するメソッドをキーボードの ViewController に記述しました。現時点では、このメソッドは ViewController の viewDidLoad メソッドで機能しますが、キーボードが初期化される ViewController クラスからこれを呼び出したいと考えています。私がそれを呼び出そうとすると、非表示のプロパティは変更されません。
テキストフィールドを含む ViewController の viewDidLoad に、次のように記述しました。
DCKeyboard *dckvc = [[DCKeyboard alloc] initWithNibName:@"DCKeyboard" bundle:nil];
[dckvc modifyKeyboardType:0 doneNextValue:0]; // Has no effect
xValue.inputView = dckvc.view;
そして DCKeyboard.m で私は定義しました:
@synthesize doneNextButton;
@synthesize decimalButton;
@synthesize posNegButton;
-(void) modifyKeyboardType:(int)buttonTypeNumber doneNextValue:(int)doneNextNumber {
switch (buttonTypeNumber) {
case 0: // Case 0: All buttons available
decimalButton.hidden = NO;
posNegButton.hidden = NO;
break;
case 1: // Case 1: No decimal button
decimalButton.hidden = YES;
posNegButton.hidden = NO;
break;
case 2: // Case 2: No positive/negative button
decimalButton.hidden = NO;
posNegButton.hidden = YES;
break;
case 3: // Case 3: No decimal or positive/negative button
decimalButton.hidden = YES;
posNegButton.hidden = YES;
break;
default:
break;
}
switch (doneNextNumber) {
case 0: // Case 0: Done
[doneNextButton setImage:[UIImage imageNamed:@"DoneButton.png"] forState:UIControlStateNormal];
[doneNextButton setImage:[UIImage imageNamed:@"DoneButtonDown.png"] forState:UIControlStateHighlighted];
break;
case 1: // Case 1: Next
[doneNextButton setImage:[UIImage imageNamed:@"NextButton.png"] forState:UIControlStateNormal];
[doneNextButton setImage:[UIImage imageNamed:@"NextButtonDown.png"] forState:UIControlStateHighlighted];
break;
default:
break;
}
}
これを上記のように呼び出そうとすると、
前述のように、次のように DCKeyboard の viewDidLoad メソッドからこれを呼び出すと、機能するので、すべてを正しく設定し、コードが機能することを確信しています。基本的な概念が欠けているに違いありません。
- (void)viewDidLoad {
[super viewDidLoad];
[self modifyKeyboardType:3 doneNextValue:1]; // This works
}