2013-08-15 2 views
0

몇 가지 객체가 포함 된 간단한 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]]; 
    } 
} 

답변

1

키보드 부속보기를 만들 때 텍스트보기를 만들고 있습니까? 명확하지 않은 목적으로 두 개의 텍스트보기를 갖는 것이 현명한 것인지 확신하지 못합니다.

나는 이것이 감독이라고 확신합니다. 텍스트보기가 이미 존재해야합니다. vewTxt를 왜 계속 만들어야합니까? 프레임을 설정할 수는 있지만 새로운 프레임을 만들지 않아야합니다.

+0

키보드 액세서리보기를 만들 때 UIToolBar를 키보드 액세서리로 사용하고 vewTxt를 UIToolBar에 추가합니다. –

+0

어쨌든, 충돌 문제를 해결할 수 있었지만 액세서리보기 내부에서 UITextInput을 편집 한 후 기본 UITextView를 편집 할 수 없다는 문제를 해결할 수 없었습니다. –