首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从UITextRange.start的行开始获取偏移量

如何从UITextRange.start的行开始获取偏移量
EN

Stack Overflow用户
提问于 2012-06-10 19:13:22
回答 1查看 1.4K关注 0票数 3

我有一个UITextView,它可以有多行。我感兴趣的是光标在某一行上的位置(不管是第一行、第二行、第三行等等)。

我一直在记录UITextRange.start,这正好给了我所需要的东西,即偏移量属性:

代码语言:javascript
复制
cp <UITextPositionImpl: 0x6e93260> <<WebVisiblePosition: 0x6e92d00>(offset=5, context=([d|], [u+0064|u+0000])>

我的问题是如何将offset=5变成一个简单的整数?

这是我的代码:

代码语言:javascript
复制
UITextRange *caretPositionRange = textView.selectedTextRange;
NSLog(@"cp %@", caretPositionRange.start);

我所需要的只是像int = caretPositionRange.start.offset这样的东西,它不能工作。

编辑:

为了澄清,我特别感兴趣的是每一行的光标位置,而不是整个TextView。所以这是行不通的:

代码语言:javascript
复制
UITextRange *caretPositionRange = tv.selectedTextRange;
    int caretPosition = [tv offsetFromPosition:tv.beginningOfDocument
                            toPosition:caretPositionRange.start];

因为这会给我每一行一个不同的位置。

编辑2:

杰西给出的答案效果很好。第一次,我得到了一个EXC_BAD_EXCESS,因为我没有检查是否startOfLine =零,所以请记住,检查它是否为零。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-06-10 19:17:52

您需要通过UITextView的UITextInput方法来询问它。就像这样:

代码语言:javascript
复制
UITextPosition *pos = caretPositionRange.start;
id<UITextInputTokenizer> tokenizer = [textView tokenizer];
UITextPosition *startOfLine = [tokenizer positionFromPosition:pos 
                                                   toBoundary:UITextGranularityLine
                                                 inDirection:UITextStorageDirectionBackward];
if (startOfLine != nil) {
    // based on some experiments, startOfLine may be nil for, eg, empty text views
    // the next line crashes if you pass nil, so we check first
    NSUInteger offset = [textView offsetFromPosition:startOfLine
                                          toPosition:pos];
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10971577

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档