Как найти позицию или получить какое-либо слово в текстовом виде и переместить кнопки над этим?
Я работаю над рассказом app.Where Нам нужно предоставить квитанции.
Теперь у меня есть история, и в этой истории есть некоторые пробелы или скрытые слова.
Всякий раз, когда я нажимаю на это скрытое слово, я получу 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];
}
Спасибо
См. еще одно изображение для ошибок:
![enter image description here]()
Ответы
Ответ 1
UITextView
принимает протокол UITextInput
. Этот протокол имеет метод -firstRectForRange:
, который укажет вам прямоугольник, охватывающий диапазон символов. Если диапазон символов охватывает несколько строк, вы должны вызывать его повторно. В первый раз он даст вам первый прямоугольник и скажет вам, какой диапазон охватывает. Затем вы настраиваете диапазон, о котором вы просите, чтобы быть оставшимися символами, которые вас интересуют, и повторяйте.
Ответ 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
}
}
→ > Edited...
Этот метод является вызовом при выборе или нажатии на текст текста, но вы можете использовать этот метод в любом из UITextView Delegate
Method
Надеюсь, это поможет вам... наслаждаться
Ответ 3
Следуя ответам Ken Thomases, с iOS 6 и далее протокол UITextInput
включает в себя следующий метод:
- (NSArray *)selectionRectsForRange:(UITextRange *)range
(См. справочный документ).
Результатом является массив UITextSelectionRect
s, который содержит кучу информации о диапазонах выбора в тексте... В зависимости от того, как вы хотите использовать исправления текстовых фрагментов, приведенный выше метод может оказаться полезным.
(ссылка UITextSelectionRect).
Примечание: из моего использования с помощью UITextView
массив возвращаемого массива UITextSelectionRect
содержит, что может быть интерпретировано как два дополнительных выбора rects. Это последние два выбора rects в массиве, и я предполагаю, что они соответствуют начальному и конечному положениям выбора. Эти прямоугольники выбора имеют ширину 0
, и соответственно устанавливаются свойства containsStart
/containsEnd
.