强制 UITextView 光标到视图顶部
Posted
技术标签:
【中文标题】强制 UITextView 光标到视图顶部【英文标题】:Force UITextView cursor to the top of the view 【发布时间】:2015-03-27 20:54:33 【问题描述】:我有一个 UITableView,它包含一系列文本输入字段,可以是 UITextField 或 UITextView 控件。选择文本输入字段时,键盘的“下一个”按钮用于循环字段。这一切都正常工作,除了一件事。当 UITextView(多行)通过调用 becomeFirstResponder 获得焦点时,光标位于视图的第二行,而不是第一行。这似乎是解决该问题的最常见建议,但在我的情况下不起作用。有什么建议么?谢谢!
-(void)textViewDidBeginEditing:(UITextView *)textView
[textView setSelectedRange:NSMakeRange(0, 0)];
也试过这个没有成功:
textView.selectedTextRange = [textView textRangeFromPosition:textView.beginningOfDocument toPosition:textView.beginningOfDocument];
【问题讨论】:
文本视图的代理是否已分配? 是的。这行代码被执行了 【参考方案1】:似乎在调用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];
【讨论】:
您的回答确实促使我尝试以下方法,这确实有效:[self performSelectorOnMainThread:@selector(setCursor) withObject:nil waitUntilDone:NO]; 太棒了,所以看起来原因是正确的,但有多种选择可以根据情况尝试解决它。感谢您的更新,因为它将帮助未来的用户。添加到我的答案中。以上是关于强制 UITextView 光标到视图顶部的主要内容,如果未能解决你的问题,请参考以下文章