【问题标题】:How to get X coordinate of a word inside a NSString如何在 NSString 中获取单词的 X 坐标
【发布时间】:2013-04-16 17:15:59
【问题描述】:

我有一个标签,里面有一个句子,那是一个字符串。我需要获取字符串中特定单词的 x 坐标。因此,例如,如果我在句子中有一个说“狗跑了”的句子,我需要能够找到 x 和 y 坐标,以及在其上放置 UITextField 的宽度和高度。到目前为止,这是我的代码:

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

有人能告诉我我需要做什么来解决这个问题吗?

【问题讨论】:

    标签: objective-c nsstring cgfloat


    【解决方案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。还是我误解了这个问题?

    【讨论】:

    • 计算字形位置是一项复杂的任务。排字员在看到整个字符串时可能会决定将单词的开头放在不同的位置。这种方法可能在某些情况下有效,但在其他情况下会失效。
    • 我对您的代码做了一些细微的修改,它正在工作!感谢您的帮助。
    • 很高兴听到。你改变了什么? ...因此可以帮助未来的读者。
    • NSString *prefix = [string substringToIndex:range.location]; - 将此处的字符串更改为 sentenceString 导致您的代码现在错误
    • @DmitriyKalachniuk - 不错的收获。已编辑。感谢改进。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-27
    • 1970-01-01
    • 2018-10-16
    • 2021-09-22
    • 1970-01-01
    • 2015-05-24
    • 1970-01-01
    相关资源
    最近更新 更多