强制 UITextView 光标到视图的顶部

Force UITextView cursor to the top of the view

我有一个包含一系列文本输入字段的 UITableView,可以是 UITextField 或 UITextView 控件。选择文本输入字段时,键盘的 'Next' 按钮用于循环显示字段。除了一件事,这一切都正常工作。当 UITextView(多行)通过调用 becomeFirstResponder 接收焦点时,光标位于视图中的第二行,而不是第一行。这似乎是解决该问题的最常见建议,但在我的情况下不起作用。有什么建议么?谢谢!

-(void)textViewDidBeginEditing:(UITextView *)textView
{
     [textView setSelectedRange:NSMakeRange(0, 0)];
}

也试过这个没有成功:

textView.selectedTextRange = [textView textRangeFromPosition:textView.beginningOfDocument toPosition:textView.beginningOfDocument];

调用textViewDidBeginEditing后,光标似乎重新定位了;所以你移动它,它又被移回去。您可以通过使用 dispatch_async:

调用 setSelectedRange 来解决这个问题
-(void)textViewDidBeginEditing:(UITextView *)textView
{
    dispatch_async(dispatch_get_main_queue(), ^{
        textView.selectedRange = NSMakeRange(0, 0);
    });;
}

为未来的用户更新您的修复程序,因为似乎另一个选项也可以解决我提到的问题,即 performSelectorOnMainThread 并调用 setCursor 移动光标。

[self performSelectorOnMainThread:@selector(setCursor) withObject:nil waitUntilDone:NO];