I am implementing a custom keyboard in my app. I want the keyboard to be applicable to multiple 'types' of textFields (all numeric, but some that can have negative values vs strictly positive, some whole-numbers vs some decimal values). I want to accomplish this by hiding one or two buttons depending on the 'type' of textField.
I have built the keyboard, and can assign it as the inputView of one of my textFields (xValue). I have also written a method in my keyboard's ViewController that takes integers as inputs and should modify the keyboard buttons. At the moment, this method works in the viewDidLoad method of my ViewController, but I want to call this from the ViewController class where the keyboard is initialised. When I do try to call it, the hidden properties aren't changing.
In the viewDidLoad of the ViewController that contains my text field I have put the following:
DCKeyboard *dckvc = [[DCKeyboard alloc] initWithNibName:@"DCKeyboard" bundle:nil];
[dckvc modifyKeyboardType:0 doneNextValue:0]; // Has no effect
xValue.inputView = dckvc.view;
and in DCKeyboard.m I have defined:
@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;
}
}
When I try to call this as above, the
As mentioned above, if I call this from DCKeyboard's viewDidLoad method as follows, then it works - so I'm confident that I've set everything up correctly and the code works. I must just be missing a fundamental concept!
- (void)viewDidLoad {
[super viewDidLoad];
[self modifyKeyboardType:3 doneNextValue:1]; // This works
}