【问题标题】:Force UITextView cursor to the top of the view强制 UITextView 光标到视图顶部
【发布时间】: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];

【问题讨论】:

  • 文本视图的代理是否已分配?
  • 是的。这行代码被执行了

标签: ios uitextview becomefirstresponder


【解决方案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];
  • 太棒了,所以看起来原因是正确的,但有多种选择可以根据情况尝试解决它。感谢您的更新,因为它将帮助未来的用户。添加到我的答案中。
猜你喜欢
  • 2015-03-21
  • 2010-11-17
  • 2016-11-29
  • 2016-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-09
  • 1970-01-01
相关资源
最近更新 更多