我有一个 UITextView 使用下面的方法在 viewDidLoad 上以编程方式创建。[_answerTextView becomeFirstResponder]调用后立即成功显示键盘 。如果用户输入 return(\n) 字符,则隐藏。
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text {
if([text isEqualToString:@"\n"]) {
[self endEditing:YES];
return NO;
}
return YES;
}
键盘被上面的代码隐藏后,我无法再通过再次点击 UITextView 来恢复它。
我尝试通过调用[_answerTextView becomeFirstResponder]父 UIView 的 Tap 事件来显示键盘,它起作用了。但这不是我想要的。
UITextView 是通过下面的方法创建的;
-(UITextView*)createSurveyTextView{
_answerTextView = [[UITextView alloc]initWithFrame:CGRectMake(0, 0, _optionsStackView.frame.size.width, 200)];
_answerTextView.keyboardType = UIKeyboardTypeDefault;
_answerTextView.text = @"";
_answerTextView.editable = true;
_answerTextView.selectable = true;
_answerTextView.delegate = self;
[_answerTextView becomeFirstResponder];
_answerTextView.backgroundColor = [UIColor whiteColor];
_answerTextView.textColor = [UIColor blackColor];
_answerTextView.layer.cornerRadius = 5;
[_optionsStackView addSubview:_answerTextView];
_answerTextView.font = [UIFont systemFontOfSize:20];
[_answerTextView setReturnKeyType:UIReturnKeyDone];
[_optionsStackView bringSubviewToFront:_answerTextView];
[self bringSubviewToFront:_answerTextView];
[_answerTextView setUserInteractionEnabled:true];
UITapGestureRecognizer *mainViewTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTextViewTap:)];
UITapGestureRecognizer *tap2 = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap2:)];
[_answerTextView addGestureRecognizer:mainViewTap];
[self addGestureRecognizer:tap2];
return _answerTextView;
}
我希望 UITextView 在用户自己点击它时简单地显示键盘。我错过了什么?
编辑:我在另一个视图中有相同的来源,但那里一切正常。唯一的区别是,这里的 UITextView 是以编程方式创建的。
编辑2:我得到了它的工作。_optionsStackViewUITextView 添加为子项的是 UIStackView 。我尝试将其添加_answerTextView到父 UIView,现在一切正常。UIStackView 会有什么问题?