我正在开发一个故事app.Where我们需要提供quizes。 现在我有一个故事,这个故事有一些空白或隐藏的话。 每当我点击隐藏的单词时,我都会得到4个选项来回答这个问题。 我尝试将按钮放在单词上,但那只会在我使用静态时 位置。 我只想知道如何获得该词的框架,我需要隐藏它,以便 我可以在上面放一些按钮,可以隐藏它。
您可以看到下面的图片。 所有答案将不胜感激
解决方案: - 这将在iOS 5之后仅在低于该值的情况下工作!
- (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];
}
由于
查看另外一张图片以查找错误:
答案 0 :(得分:18)
UITextView
采用UITextInput
协议。该协议具有方法-firstRectForRange:
,它将告诉您覆盖一系列字符的矩形。如果字符范围跨越多行,则必须重复调用它。它第一次会给你第一个矩形并告诉你覆盖的范围。然后,您调整您要求的剩余字符范围并重复。
答案 1 :(得分:2)
-(void)textViewDidChangeSelection:(UITextView *)textView
{
NSRange range = textView.selectedRange;
if(range.location<textView.text.length)
{
NSString * firstHalfString = [txtView.text substringToIndex:range.location];
NSString *temp = @"s";
CGSize s1 = [temp sizeWithFont:[UIFont systemFontOfSize:15]
constrainedToSize:CGSizeMake(self.view.bounds.size.width - 40, MAXFLOAT) // - 40 For cell padding
lineBreakMode:UILineBreakModeWordWrap]; // enter you textview font size
CGSize s = [firstHalfString sizeWithFont:[UIFont systemFontOfSize:15]
constrainedToSize:CGSizeMake(self.view.bounds.size.width - 40, MAXFLOAT) // - 40 For cell padding
lineBreakMode:UILineBreakModeWordWrap]; // enter you textview font size
//Here is the frame of your word in text view.
NSLog(@"xcoordinate=%f, ycoordinate =%f, width=%f,height=%f",s.width,s.height,s1.width,s1.height);
CGRect rectforword = CGRectMake(s.width, s.height, s1.width, s1.height);
// rectforword is rect of yourword
}
else
{
// Do what ever you want to do
}
}
<强>&GT;&GT;&GT;被修改... 强>
当你选择或点击textview文本时调用此方法,但你可以在任何UITextView中使用此方法Delegate
方法
希望,这会帮助你......享受
答案 2 :(得分:2)
继 Ken Thomases&#39; 回答之后,从iOS 6开始,UITextInput
协议包含以下方法:
- (NSArray *)selectionRectsForRange:(UITextRange *)range
结果是一个UITextSelectionRect
的数组,它有一堆关于文本中选择范围的信息...根据你想要如何使用文本块的部分,上面的方法可能是有用的
(UITextSelectionRect reference)。
注意:根据我对UITextView
的使用情况,返回的UITextSelectionRect
数组包含可能被解释为的另外两个选择集。这些是数组中的最后两个选择集,我假设它们对应于选择的 start 和 end 位置。这些选择对象的宽度均为0
,并且相应地设置了containsStart
/ containsEnd
属性。
答案 3 :(得分:0)
就我而言,添加“layoutIfNeeded”有帮助。
textView.superview?.layoutIfNeeded()
let beginning = textView.beginningOfDocument
let start = textView.position(from: beginning, offset: range.location)
let end = textView.position(from: start!, offset: range.length)
let textRange = textView.textRange(from: start!, to: end!)
let frame = textView.firstRect(for: textRange!)