2013-04-16 4 views
0

У меня есть метка с предложением в ней, то есть одна строка. Мне нужно получить координату x для определенного слова в строке. Например, если у меня есть предложение, в котором говорится: «Собака побежала» внутри предложения, мне нужно найти координаты x и y, а также ширину и высоту, чтобы поместить UITextField над ним. Вот мой код:Как получить координату X слова внутри NSString

- (void)insertTextFields:(NSString *)string inLabel:(UILabel *)label 
{ 
    CGFloat stringWidth = [self getWidthOfString:string inLabel:label]; 
    CGFloat stringHeight = label.bounds.size.height; 
    CGFloat stringYOrigin = label.bounds.origin.y; 
    CGFloat stringXOrigin = [self getXOriginOfString:string fromString:label.text inLabel:label]; 
    CGRect textFieldRect = CGRectMake(stringXOrigin, stringYOrigin, stringWidth, stringHeight); 
    UITextField *textField = [[UITextField alloc] initWithFrame:textFieldRect]; 
    [label addSubview:textField]; 
} 


- (CGFloat)getWidthOfString:(NSString *)string inLabel:(UITextField *)label 
{ 
    CGFloat maxWidth = CGRectGetMaxX(label.frame); 
    CGSize stringSize = [string sizeWithFont:label.font forWidth:maxWidth lineBreakMode:NSLineBreakByCharWrapping]; 
    CGFloat width = stringSize.width; 
    return width; 
} 

- (CGFloat)getXOriginOfString:(NSString *)string fromString:(NSString *)sentenceString inLabel:(UILabel *)label 
{ 
    CGFloat maxWidth = CGRectGetMaxX(label.frame); 
    CGSize sentenceStringSize = [sentenceString sizeWithFont:label.font forWidth:maxWidth lineBreakMode:NSLineBreakByWordWrapping]; 
    CGSize stringSize = [string sizeWithFont:label.font forWidth:maxWidth lineBreakMode:NSLineBreakByWordWrapping]; 
    //I have the width of both the individual word and the sentence 
    //now I need to find the X coordinate for the individual word inside of the sentence string 
    return xOrigin; 
} 

Может ли кто-нибудь сказать мне, что мне нужно сделать, чтобы исправить это?

ответ

1

Это позиция x начала слова? Просто измерить строку, которая предшествует слово ....

- (CGFloat)getXOriginOfString:(NSString *)string fromString:(NSString *)sentenceString inLabel:(UILabel *)label { 

    CGFloat maxWidth = CGRectGetMaxX(label.frame); 
    NSRange range = [sentenceString rangeOfString:string]; 
    NSString *prefix = [sentenceString substringToIndex:range.location]; 

    return [prefix sizeWithFont:label.font 
         forWidth:maxWidth 
        lineBreakMode:NSLineBreakByWordWrapping].width; 
} 

Конец слова будет этот результат + stringSize в коде вы публикуемую. Или, может быть, я не понимаю вопрос?

+2

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

+0

Я внес некоторые изменения в код, и он работает! Спасибо за помощь. –

+0

Рад слышать. Что вы изменили? ... поэтому будущим читателям может помочь. – danh

Смежные вопросы