몇 가지 객체가 포함 된 간단한 UIViewController가 있습니다. UITextView와 UTextView에 InputAccessoryView로 추가되는 UIToolBar입니다. viewDidLayoutSubviews 호출 될 때 알림 관찰자를 "keyboardDidShow"함수를 호출 할 때 UITextView 크기를 조정할 수 있도록 키보드가 나타나면 설정하여 키보드 뒤에 있지 않습니다. textViewShouldBeginEditing이 호출 될 때 InputAccessoryView를 UITextView에 추가합니다. 그러나보기를 닫을 때 알려지지 않은 오류가 발생합니다. 또한 InputAccessoryView 역할을하는 UIToolBar에서 UITextField를 클릭하면 더 이상 UITextView를 편집 할 수 없습니다. 내 코드는 다음과 같습니다.UITextField InputAccessoryView 응용 프로그램 충돌이 발생했습니다.
- (void)viewDidLayoutSubviews {
if (!resized) {
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidShow:) name:UIKeyboardDidShowNotification object:nil];
[poemView becomeFirstResponder];
}
}
- (void)keyboardDidShow:(NSNotification *)note {
if (!resized) {
NSDictionary *keyboardInfo = [note userInfo];
NSValue *keyboardFrameSize = [keyboardInfo valueForKey:UIKeyboardFrameBeginUserInfoKey];
CGRect keyboardFrameBeginRect = [keyboardFrameSize CGRectValue];
toolBar.frame = CGRectMake(0, 0, toolBar.frame.size.width, toolBar.frame.size.height);
[txtView setFrame:CGRectMake(txtView.frame.origin.x, txtView.frame.origin.y, txtView.frame.size.width, txtView.frame.size.height - (keyboardFrameBeginRect.size.height))];
[txtView setContentSize:CGSizeMake(txtView.frame.size.width, txtView.frame.size.height - keyboardFrameBeginRect.size.height)];
[[NSNotificationCenter defaultCenter] removeObserver:self];
resized = YES;
}
}
- (IBAction)dismissView:(id)sender {
vewTxt = nil;
[txtView setInputAccessoryView:nil];
[self dismissViewControllerAnimated:YES completion:nil];
}
- (BOOL)textViewShouldBeginEditing:(UITextView *)textView {
if (![txtView inputAccessoryView]) {
[txtView setInputAccessoryView:[self createInputAccessoryView]];
}
return YES;
}
- (UIToolbar *)createInputAccessoryView {
UIToolbar *acc = [[UIToolbar alloc] init];
[acc setBackgroundColor:[UIColor redColor]];
[acc setTintColor:[UIColor redColor]];
[acc sizeToFit];
[acc setFrame:CGRectMake(0,txtView.frame.size.height - 44, txtView.frame.size.width, 44)];
vewTxt = [[UITextField alloc] initWithFrame:CGRectMake(0, 0, vewTxt.frame.size.width - 25, 25)];
[vewTxt setText:@"Etc...."];
[vewTxt setDelegate:self];
[vewTxt setFont:[UIFont italicSystemFontOfSize:14]];
[vewTxt setTextColor:[UIColor grayColor]];
[vewTxt setBorderStyle:UITextBorderStyleRoundedRect];
UIBarButtonItem *titleItem = [[UIBarButtonItem alloc] initWithCustomView:titleTxt];
NSArray *items = [NSArray arrayWithObjects:titleItem, nil];
[acc setItems:items animated:YES];
return acc;
}
- (void)textFieldDidBeginEditing:(UITextField *)textField {
if ([[textField text] isEqualToString:@"Etc...."]) {
[textField setTextColor:[UIColor blackColor]];
[textField setText:@""];
[textField setFont:[UIFont systemFontOfSize:14]];
}
}
키보드 액세서리보기를 만들 때 UIToolBar를 키보드 액세서리로 사용하고 vewTxt를 UIToolBar에 추가합니다. –
어쨌든, 충돌 문제를 해결할 수 있었지만 액세서리보기 내부에서 UITextInput을 편집 한 후 기본 UITextView를 편집 할 수 없다는 문제를 해결할 수 없었습니다. –