2013-04-16 53 views
0

我有一個帶有句子的標籤,即一個字符串。我需要獲取字符串中特定單詞的x座標。例如,如果我在句子中有一句話說「狗跑了」,我需要能夠找到x和y座標以及將UITextField放在它上面的寬度和高度。這是我到目前爲止的代碼:如何獲取NSString中某個單詞的X座標

- (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

相關問題