我有一个 UITextView 可以有多行。我感兴趣的是光标在某一行上的位置(第一行、第二行、第三行等都没有关系)。
我一直在记录 UITextRange.start 这正是我所需要的,即 offset 属性:
cp <UITextPositionImpl: 0x6e93260> <<WebVisiblePosition: 0x6e92d00>(offset=5, context=([d|], [u+0064|u+0000])>
我的问题是我如何将 offset=5 变成一个简单的整数?
这是我的代码:
UITextRange *caretPositionRange = textView.selectedTextRange;
NSLog(@"cp %@", caretPositionRange.start);
我只需要像 int cp = caretPositionRange.start.offset 这样不起作用的东西。
编辑:
澄清一下,我对每一行的光标位置特别感兴趣,而不是整个 TextView。所以这真的行不通:
UITextRange *caretPositionRange = tv.selectedTextRange;
int caretPosition = [tv offsetFromPosition:tv.beginningOfDocument
toPosition:caretPositionRange.start];
因为这会给我每条线的不同位置。
编辑2:
杰西给出的以下答案非常有效。第一次,我得到了一个 EXC_BAD_EXCESS,因为我没有检查 startOfLine = nil,所以请记住检查它是否不是 nil。