在 Objective-C 中加载时将光标移动到预填充 Textview 的开头

Posted

技术标签:

【中文标题】在 Objective-C 中加载时将光标移动到预填充 Textview 的开头【英文标题】:Move Cursor to Beginning of Prepopulated Textview On Load in Objective-C 【发布时间】:2019-09-02 14:23:01 【问题描述】:

在从 UITextView 预填充了一些文本的代码中加载视图控制器时,我希望光标位于文本的开头而不是结尾。

但是,以下代码无效。光标仍出现在预填充文本的末尾。

如何使光标移到文本的开头?

   self.myTextView.text = @"Text that should go after cursor";
    [self.myTextView becomeFirstResponder];      
    UITextPosition* start = self.myTextView.beginningOfDocument;
    UITextRange *newRange = [self.myTextView textRangeFromPosition:start toPosition:start];
NSLog("newRange is%@",newRange);
    [self.myTextView setSelectedTextRange:newRange];

注意,newRange 记录为 <_uitextkittextrange:> (0, 0)F 所以我认为下一行实际上并没有改变范围。但我不知道其他方法可以做到这一点。

【问题讨论】:

【参考方案1】:

我发现您的打印错误,缺少@

NSLog(@"newRange is%@",newRange);

然后我发现你的代码是有效的,光标可以定位到最前面

我用模拟器测试了ios 9.1iOS 10.1iOS 11.1iOS 12.4,都有效。不知道你的环境怎么样。

还有一点需要注意的是,在执行那段代码之前,确保myTextView已经创建成功。我在测试时使用storyboard创建myTextView,并将您的代码添加到viewDidLoad中。

【讨论】:

我还把最后一行放在了 dispatch_async(dispatch_get_main_queue(), ^ [self.myTextView setSelectedTextRange:newRange]; );

以上是关于在 Objective-C 中加载时将光标移动到预填充 Textview 的开头的主要内容,如果未能解决你的问题,请参考以下文章

在 XDocument 中加载时,XML 标头被删除

在 cypress 中加载时继续向下滚动

进度条不隐藏是当数据在片段中的recyclerview中加载时

有没有办法在编辑时将 TextField 的光标移动到文本的末尾?- SwiftUI

在 Vue.js 中加载时未检查复选框

在 Vue.js 2 组件中加载时未定义 Webpack 外部 JS 文件