I am working on a story app.Where We need to provide quizes. Now I am having a story and there are some blanks or hidden words over that story. Whenever I click over that hidden word,I will get the 4 options to answer that. I tried by placing button over the words,But that would be only when I am using some static position. I just want to know how can I get the frame of that word,which I need to hide ,so that I can place some button over that and can hide this.
You can see the image below.. All answers would be appreciated
Solution:- This will work after iOS 5 only not below that !
- (CGRect)frameOfTextRange:(NSRange)range inTextView:(UITextView *)textView
{
UITextPosition *beginning = textView.beginningOfDocument;
UITextPosition *start = [textView positionFromPosition:beginning offset:range.location];
UITextPosition *end = [textView positionFromPosition:start offset:range.length];
UITextRange *textRange = [textView textRangeFromPosition:start toPosition:end];
CGRect rect = [textView firstRectForRange:textRange];
return [textView convertRect:rect fromView:textView.textInputView];
}
Thanks
See one more image for errors:
>>>Edited...
This method is call when you select or tap on the textview text but you can use this method in any of UITextView
Delegate
MethodHope, this will help you...enjoy
Following on from Ken Thomases' answer, from iOS 6 and onwards the
UITextInput
protocol includes the following method:- (NSArray *)selectionRectsForRange:(UITextRange *)range
(See the reference doc).
The result is an array of
UITextSelectionRect
s, which have a bunch of information about selection ranges in text... Depending on how you want to use the rects of text-chunks, the above method might be useful.(UITextSelectionRect reference).
Note: from my usage with
UITextView
, the array ofUITextSelectionRect
s returned contains, what might be interpreted as, two additional selection rects. These are the last two selection rects in the array and I assume they correspond to the start and end positions of the selection. These selection rects each have a width of0
and thecontainsStart
/containsEnd
properties are set accordingly.UITextView
adopts theUITextInput
protocol. That protocol has the method-firstRectForRange:
which will tell you the rectangle covering a range of characters. If the range of characters spans multiple lines, you have to call it repeatedly. The first time it will give you the first rect and tell you what range that covers. Then, you adjust the range you're asking about to be the remaining characters you're interested in and repeat.