テキストビュー内のいくつかUITextView characterRangeAtPointを取得するためにコードで使用しようとしていました。そして、それらを引数として使用し、オフセットを取得するために使用しました。iOS 6 では問題なく動作しましたが、iOS 7 で試してみると、テキストビュー内で何を試しても常に返されました。UITextRangesCGPointsUITextPositionsUITextRangesUITextView offsetFromPosition: toPosition:offset 0CGPoint
コードは次のとおりです。
// init the textview
textview = [[UITextView alloc] initWithFrame:CGRectMake(10, 50, 300, 500)];
textview.backgroundColor = [UIColor whiteColor];
[self.view addSubview:textview];
// load the txt file for testing  
NSError *error;
NSString *content = [[NSString alloc] initWithContentsOfFile: [[NSBundle mainBundle] pathForResource:@"test" ofType:@"txt"] encoding:NSUTF8StringEncoding error:&error];
if (error) {
    NSLog(@"load string error:%@", [error localizedFailureReason]);
    return;
}
// set the text and font
textview.text = content;
UIFont *font = [UIFont systemFontOfSize:18];
textview.font = font;
// get text range at point (100, 100) and string offset from the beginning to this point 
UITextRange *textrange = [textview characterRangeAtPoint: CGPointMake(100, 100)];
NSInteger offset = [textview offsetFromPosition:textview.beginningOfDocument toPosition:textrange.start];
NSLog(@"offset = %d", offset);
返されたのoffsetは常に0でした。が原因かどうかをテストするためにUITextView offsetFromPosition: toPosition:、次のコードを試しました。
NSInteger offset1 = [textview offsetFromPosition:textview.beginningOfDocument toPosition:textview.endOfDocument];
NSLog(@"offset1 = %d", offset1);
それは私が使用offset1 = 5264したものによれば正しかったtest.txtです。したがって、問題は からUITextRange返されたものtextview characterRangeAtPointです。IOS 7characterRangeAtPointでは、指定された で正しいテキスト範囲が返されなかったようですCGPoint。そのtextview offsetFromPosition: toPosition:ため、正しいオフセットを返すことができませんでした。
しかし、IOS 6 で同じコードを使用したところ、非常にうまく機能しました。のリファレンスも確認しcharacterRangeAtPointましたが、有用な情報は見つかりませんでした。
characterRangeAtPointIOS 7 で何が起こったのか知っている人はいますか? IOS 6 と同じように機能させるには、どうすればよいですか?