Я использую пользовательскую клавиатуру в своем приложении. Я хочу, чтобы клавиатура была применима к нескольким «типам» textFields (все числовые, но некоторые, которые могут иметь отрицательные значения по сравнению со строго положительными, некоторые целые числа против некоторых десятичных значений). Я хочу сделать это, скрывая одну или две кнопки в зависимости от типа текстового поля.
Я построил клавиатуру и могу назначить ее как inputView одного из моих текстовых полей (xValue).
Я также написал метод в ViewController моей клавиатуры, который принимает целые числа в качестве входных данных и должен изменять кнопки клавиатуры. На данный момент этот метод работает в методе viewDidLoad моего ViewController, но я хочу вызвать его из класса ViewController, в котором инициализирована клавиатура. Когда я пытаюсь вызвать его, скрытые свойства не меняются.
В viewDidLoad ViewController, который содержит мое текстовое поле, я поместил следующее:
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;
}
}
Когда я пытаюсь назвать это, как указано выше,
Как упомянуто выше, если я вызываю это из метода viewDidLoad DCKeyboard следующим образом, то он работает - так что я уверен, что все настроил правильно и код работает. Мне просто не хватает фундаментальной концепции!
- (void)viewDidLoad {
[super viewDidLoad];
[self modifyKeyboardType:3 doneNextValue:1]; // This works
}