Подтвердить что ты не робот

Как найти позицию или получить какое-либо слово в текстовом виде и переместить кнопки над этим?

Я работаю над рассказом app.Where Нам нужно предоставить квитанции. Теперь у меня есть история, и в этой истории есть некоторые пробелы или скрытые слова. Всякий раз, когда я нажимаю на это скрытое слово, я получу 4 варианта ответа. Я попытался, поместив кнопку над словами, но это было бы только тогда, когда я использую статическую должность. Я просто хочу знать, как я могу получить фрейм этого слова, который мне нужно скрыть, так что Я могу поместить над ним какую-то кнопку и скрыть это.

Вы можете увидеть изображение ниже. enter image description here Все ответы будут оценены

Решение: - Это будет работать после того, как только 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

4b9b3361

Ответ 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.