Ios UITextField InputAccessoryView崩溃应用程序

Ios UITextField InputAccessoryView崩溃应用程序,ios,uitextview,uitoolbar,uitextinput,Ios,Uitextview,Uitoolbar,Uitextinput,我有一个简单的UIViewController,其中包含几个对象:一个UITextView和一个作为InputAccessoryView添加到UTextView的UIToolBar。调用viewDidLayoutSubviews时,我将通知观察者设置为在键盘出现时调用函数“keyboardDidShow”,以便调整UITextView的大小,使其不在键盘后面。当调用textViewShouldBeginEditing时,我将InputAccessoryView添加到UITextView。但是,当

我有一个简单的UIViewController,其中包含几个对象:一个UITextView和一个作为InputAccessoryView添加到UTextView的UIToolBar。调用viewDidLayoutSubviews时,我将通知观察者设置为在键盘出现时调用函数“keyboardDidShow”,以便调整UITextView的大小,使其不在键盘后面。当调用textViewShouldBeginEditing时,我将InputAccessoryView添加到UITextView。但是,当我退出视图时,会抛出一个未知错误。此外,单击UIToolBar中充当InputAccessoryView的UITextField后,我将无法再返回编辑UITextView。我的代码如下:

- (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]];
    }
}

创建键盘附件视图时是否正在创建文本视图?我不确定有两个目的不明的文本视图是否明智


我相信这是一个疏忽。您的文本视图应该已经存在。为什么要一次又一次地创建vewTxt?您可以设置框架,但肯定不应该创建新框架

当我创建键盘附件视图时,我正在制作一个UIToolBar用作键盘附件,并将vewTxt添加到UIToolBar中。我设法修复了崩溃,但我无法修复在编辑附件视图中的UITEXT后无法返回编辑主UITextView的问题。