Как добавить UILabel между двумя строками

у меня есть этот код, чтобы показать некоторые тексты в UITextview.. я просто хочу добавить UILabel между этими строками. я получаю текст в этом формате, 1 это первый текст 2 это второй текст 3 это третий текст, я хотите добавить или добавить UILabel между числовым символом и текстом. Мой код для отображения текста

 NSMutableString *combined = [NSMutableString string];

    for(NSUInteger idx = 0; idx < [delegatee.allSelectedVerseEnglish count]; idx++) {
        [combined appendFormat:@"   %d %@", 
         idx + 1, 
         [delegatee.allSelectedVerseEnglish objectAtIndex:idx]];

    }
    NSNumberFormatter * f = [[NSNumberFormatter alloc] init]; 
    NSNumber * n = [f numberFromString:combined]; 
    NSLog(@"N: %@", n);
       maintextview.text =combined;

в сочетании - это текст в указанном выше формате, а maintextview - это UITextview.

я также получаю диапазон строк между двумя предложениями

- (void)textViewDidEndEditing:(UITextView *)textView
{
    if (textView == maintextview) {

    mainpopupview.frame =CGRectMake(0, 0, 768, 1004)    ;
    [self.view addSubview:mainpopupview];

    NSRange selectedRange = [textView selectedRange];
    NSString *backString = [maintextview.text substringToIndex:selectedRange.location];
    NSRange backRange = [backString rangeOfString:@"   " options:NSBackwardsSearch];
    NSRange backRangee = [backString rangeOfString:@"   " options:NSBackwardsSearch];
    int  myRangeLenght = backRangee.location - backRange.location;
    NSRange myStringRange = NSMakeRange (backRange.location, myRangeLenght);
    NSString *forwardString  = [maintextview.text substringFromIndex:backRange.location];
    NSLog(@"%@",[[forwardString componentsSeparatedByString:@"   "] objectAtIndex:1]);
    NSLog (@"%@",  [maintextview.text substringWithRange:myStringRange]);

    NSString * myStringTxt = [[forwardString componentsSeparatedByString:@"   "] objectAtIndex:1];
    NSLog(@"1 %@", myStringTxt);

    //  maintextview.textColor = [UIColor yellowColor];

    NSRange myStringRangee = [maintextview.text rangeOfString:myStringTxt];
    [maintextview select:self];
    maintextview.selectedRange = myStringRangee;

Есть какой-либо способ сделать это. Заранее спасибо.


person stackiphone    schedule 01.06.2012    source источник
comment
Просто вопрос, вы создаете новую строку после редактирования, чтобы поместить ее обратно в свой UITextView? Почему вы хотите иметь отдельный промежуточный UILabel, а не просто добавлять текст (вы хотите, чтобы он был в UILable) в строку, которую вы отправляете обратно в UITextView?   -  person trumpetlicks    schedule 01.06.2012
comment
@trumpetlicks haii, спасибо за ответ, я хочу uilabel becz, это история... номер стиха должен быть другого цвета, но в uitextvierw невозможно добавить два цвета, поэтому, если я получу uilabel, я можно изменить цвет текста метки и сделать номер стиха в uilabel.ok?   -  person stackiphone    schedule 01.06.2012
comment
Итак, вы хотите, чтобы фрагменты текста ВЫГЛЯДИЛИ по-другому :-) Вы уже реализуете процедуру делегата textViewDidEndEditing. Как вы определили свои TextView (ы) (в файле xib или создали их динамически в коде)?   -  person trumpetlicks    schedule 01.06.2012
comment
@trumpetlicks я определил текстовое представление с помощью xib   -  person stackiphone    schedule 01.06.2012
comment
В этом случае вы также можете добавить свой UILabel в файл xib и просто изменить его положение и цвет (в коде) на основе входного текста. Существуют способы получения размера NSString в пикселях на основе параметров шрифта, которые могут помочь вам в определении размера вашего UITextField и позиционировании вашего UILabel после редактирования текста. Ссылка на хорошие вещи. discussions.apple.com/thread/1622739?start=0&tstart=0   -  person trumpetlicks    schedule 01.06.2012
comment
Вот также БОЛЬШАЯ ссылка на растущее текстовое представление. Я предполагаю, что вы могли бы позаимствовать этот код и манипулировать им, чтобы он работал и для UILabel. Таким образом, вы можете увеличить (или уменьшить) свой UITextField в крайнем левом положении, расположить свой UILabel справа от него, а затем получить размер меры UILabel, чтобы расположить самый правый UITextField.   -  person trumpetlicks    schedule 01.06.2012


Ответы (1)


Я не знаю, какое взаимодействие с пользователем здесь вам нужно, но если вы просто отображаете текст для пользователя, но не могли бы вы заменить свой UITextView с UIWebView (загрузка статического текста через loadHTMLString:baseURL:, используя разметку html для установки цвета текста)? Я ссылаюсь на документацию UITextView:

Этот класс не поддерживает несколько стилей для текста. Указанные вами атрибуты шрифта, цвета и выравнивания текста всегда применяются ко всему содержимому текстового представления. Чтобы отобразить более сложный стиль в вашем приложении, вам нужно использовать объект UIWebView и отображать содержимое с помощью HTML.

Если вам действительно нужно сделать это с помощью отдельных элементов управления пользовательского интерфейса (намного сложнее, чем просто использование UIWebView), вы не «вставляете» UILabel в текст, а, скорее всего, у вас будет один элемент управления для текста до точки изменения цвета, еще один элемент управления для текста другого цвета или что у вас есть, еще один элемент управления для остального текста. Это довольно быстро стало бы волосатым (если бы оно не было выложено в виде сетки, и даже тогда это проблематично по сравнению с UIWebView).

person Rob    schedule 01.06.2012
comment
Думаю, можно предположить, что stackiphone вживую редактирует текст. К сожалению, UIWebView не является текстовым элементом управления с возможностью ввода. Если он хочет ввести текст, ему, скорее всего, придется делать то, что он пытается сделать без UIWebView. Даже если бы UIWebView был способен к вводу, ему тогда пришлось бы каким-то образом попасть в середину потока ввода текста и динамически создавать теги HTML вокруг текста, чтобы его отображение должно работать правильно. - person trumpetlicks; 01.06.2012