UITextView,在编辑时可以滚动吗?

6
我有一个大的UITextView,几乎占满了屏幕。当我点击它时,键盘弹出来,我可以编辑文本。然而,当我输入越来越多时,文本最终会在键盘后面超出视图范围,我就看不到我正在输入什么。
你应该如何处理这种情况呢?你需要跟踪光标位置并手动滚动视图吗?
3个回答

7
您需要使用以下代码来根据文本范围(或者说根据打字)滚动文本视图。
NSRange range = NSMakeRange(textView.text.length - 1, 1);
[textView scrollRangeToVisible:range];

希望这能帮到您...

谢谢您的回复。但我已经找到了我想要做的链接,下面的链接可以正常工作。 - jamil
3
https://developer.apple.com/library/ios/#samplecode/KeyboardAccessory/Listings/Classes_ViewController_m.html - jamil
3
为了后人能够看懂,您能否将解决方案以正式答案的形式写出来?(别忘了接受一些答案!) - user577537
@adamjansch:完全同意。如果已经有解决方案,为什么还要问问题呢?我认为这只是为了“增加Stack Overflow的堆栈”。 - Nitin
不好意思,我已经花了两个小时在寻找这个问题的解决方案,但是我还是没有找到最好的解决方法。但是当我发布了问题之后,仅仅5分钟后我就得到了一个链接。这就是为什么我发布了链接来帮助其他人。如果您介意的话,请原谅我。 - jamil

4

我猜您需要根据键盘的显示/隐藏来调整UITextView的大小,以便键盘不会覆盖您的文本视图。以下是示例代码。

- (void)viewDidLoad
{
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(keyboardWillShow:)
                                                 name:UIKeyboardWillShowNotification
                                               object:nil];
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(keyboardWillHide:)
                                                 name:UIKeyboardWillHideNotification
                                               object:nil];
}

- (void)keyboardWillShow:(NSNotification *)notification
{
    [UIView beginAnimations:nil context:nil];
    CGRect endRect = [[notification.userInfo objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue];
    CGRect newRect = YOUT_TEXT_VIEW.frame;
    //Down size your text view
    newRect.size.height -= endRect.size.height;
    YOUT_TEXT_VIEW.frame = newRect;
    [UIView commitAnimations];
}

- (void)keyboardWillHide:(NSNotification *)notification
{
    ... // Resize your textview when keyboard is going to hide
}

2

哇,TPKeyboardAvoiding 真是个宝石! - thomers

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