내 앱에서 맞춤 키보드를 구현하고 있습니다. 나는 키보드를 textFields의 여러 '유형'(모든 숫자이지만, 음수 값 대 엄격히 양수, 일부 전체 숫자 대 소수 값을 가질 수있는 유형)에 적용 할 수 있습니다. textField의 '유형'에 따라 하나 또는 두 개의 버튼을 숨겨서이 작업을 수행하고 싶습니다.뷰를 동적으로 수정하기
나는 키보드를 만들었으므로 그것을 내 textFields (xValue) 중 하나의 inputView로 할당 할 수 있습니다. 정수를 입력으로 사용하는 키보드의 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;
}
}
나는이 전화를 할 때 나는 다음과 같은 넣어 가지고 내 텍스트 필드를 포함하는의 ViewController의의 viewDidLoad에서
위와 같이,위에서 언급했듯이 내가 DCKeyboard의 viewDidLoad 메서드에서 다음과 같이 호출하면 작동합니다. 그래서 모든 것을 올바르게 설정했다고 확신합니다. 코드가 작동합니다. 나는 근본적인 개념을 놓치고 있어야합니다!
- (void)viewDidLoad {
[super viewDidLoad];
[self modifyKeyboardType:3 doneNextValue:1]; // This works
}
와 같은 화면을 표시하는 메서드를 호출 한 후에 해당 메서드를 호출 할 수 있습니다. 감사합니다. 그것을 위해 - 단순히 키보드 작업을 초기화 한 후 두 줄을 바꾼다. – slatfats