我有一个UITableView,它包含一系列文本输入字段,可以是UITextField或UITextView控件。选择文本输入字段时,键盘的“下一步”按钮用于循环显示字段。这一切都正常,除了一件事。当UITextView(多线)通过调用becomeFirstResponder接收焦点时,光标位于视图中的第二行,而不是第一行。这似乎是解决这个问题最常见的建议,但它在我的案例中不起作用。有什么建议?谢谢!
-(void)textViewDidBeginEditing:(UITextView *)textView
{
[textView setSelectedRange:NSMakeRange(0, 0)];
}
也尝试了这个没有成功:
textView.selectedTextRange = [textView textRangeFromPosition:textView.beginningOfDocument toPosition:textView.beginningOfDocument];
答案 0 :(得分:1)
似乎在调用textViewDidBeginEditing
后重新定位了光标;所以你移动它然后移回去。您可以使用setSelectedRange
:
dispatch_async
来解决此问题
-(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];