iOS键盘遮挡了TextView中的编辑文本

3
我正在我的视图控制器中实现一个textView。由于我计划让用户在此视图中写下笔记,所以这个textView覆盖了整个屏幕。然而,当用户触摸textView并弹出键盘时,似乎会出现问题。
问题是,一旦触摸了textView,键盘就会在屏幕的一半显示出来,并且编辑文本的开头会被键盘遮住。我尝试输入一些内容,但由于编辑文本被键盘遮挡,根本看不到文本。有没有办法解决这个问题?

嗯,你可以尝试修改文本框/文本视图的父视图中的“y”值。 - JCurativo
2个回答

2
在您的实现文件中编写UITextView的委托方法,并将UITextView的委托设置为self。
- (BOOL)textViewShouldBeginEditing:(UITextView *)textView
{
    CGRect rect = txtMessage.frame;
    rect.size.height = 91;// you can set y position according to your convinience
    txtMessage.frame = rect;
    NSLog(@"texView frame is %@",NSStringFromCGRect(textView.frame));

    return YES;
}
- (BOOL)textViewShouldEndEditing:(UITextView *)textView{
    return YES;
}


- (void)textViewDidEndEditing:(UITextView *)textView{

    CGRect rect = txtMessage.frame;
    rect.size.height = 276; // set back orignal positions
    txtMessage.frame = rect;
   NSLog(@"EndTextView frame is %@",NSStringFromCGRect(textView.frame));

}

我认为通过Storyboard应该有一种方法来解决这个问题。但是这段代码也非常好用。不管怎样,我们为什么需要在这里使用textFieldShouldEndEditing呢? - Kann
当文本视图被要求放弃第一响应者状态时,将调用此方法。如果应停止编辑,则返回YES;否则,返回NO以继续编辑会话。 - Talha
我在右上角实现了另一个完成按钮,只需使用[textView resign responder]即可让textview放弃第一响应者状态。这个按钮与UITextViewDelegate有什么关系?每次使用UITextViewDelegate时,我们需要显式地实现这个函数吗? - Kann
请阅读苹果文档了解此内容。 - Talha

0

当键盘弹出时,您必须调整文本视图的大小。首先,定义一个新方法来注册您的控制器以接收键盘显示和隐藏通知:

- (void)registerForKeyboardNotifications
{
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(keyboardWasShown:)
                                                 name:UIKeyboardDidShowNotification object:nil];

    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(keyboardWillBeHidden:)
                                                 name:UIKeyboardWillHideNotification object:nil];
}

然后从您的viewDidLoad:方法中调用[self registerForKeyBoardNotifications];

之后,您必须实现回调方法:

这里是keyboardWasShown:,在此处获取键盘的高度并将该量减去到您的textView的框架高度(如您所说,您的文本视图填满整个屏幕,因此最终高度为先前高度减去键盘高度):

- (void)keyboardWasShown:(NSNotification*)aNotification
{
    NSDictionary* info = [aNotification userInfo];
    CGSize kbSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
    CGRect rect = self.textView.frame;
    rect.size.height -= kbSize.height;
}

这里是 keyboardWillBeHidden:

- (void)keyboardWillBeHidden:(NSNotification*)aNotification
{
    CGRect rect = self.textView.frame;
    rect.size.height = SCREEN_HEIGHT;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接