我有一个UITextView,它可以有多行。我感兴趣的是光标在某一行上的位置(不管是第一行、第二行、第三行等等)。
我一直在记录UITextRange.start,这正好给了我所需要的东西,即偏移量属性:
cp <UITextPositionImpl: 0x6e93260> <<WebVisiblePosition: 0x6e92d00>(offset=5, context=([d|], [u+0064|u+0000])>我的问题是如何将offset=5变成一个简单的整数?
这是我的代码:
UITextRange *caretPositionRange = textView.selectedTextRange;
NSLog(@"cp %@", caretPositionRange.start);我所需要的只是像int = caretPositionRange.start.offset这样的东西,它不能工作。
编辑:
为了澄清,我特别感兴趣的是每一行的光标位置,而不是整个TextView。所以这是行不通的:
UITextRange *caretPositionRange = tv.selectedTextRange;
int caretPosition = [tv offsetFromPosition:tv.beginningOfDocument
toPosition:caretPositionRange.start];因为这会给我每一行一个不同的位置。
编辑2:
杰西给出的答案效果很好。第一次,我得到了一个EXC_BAD_EXCESS,因为我没有检查是否startOfLine =零,所以请记住,检查它是否为零。
发布于 2012-06-10 19:17:52
您需要通过UITextView的UITextInput方法来询问它。就像这样:
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];
}https://stackoverflow.com/questions/10971577
复制相似问题