我有一个带有一些单词的UITextField,我想在某个索引处找出单词的边界矩形。
最好给出一些视觉示例,这样我就做了一个草图来展示我想要的东西。
让我们说我想要"很好的" (相对)到UITextField / UILabel所以我会调用一些像
这样的方法 [self boundingRectForWordAtIndex:2]
它会给我你在图片中看到的矩形
答案 0 :(得分:0)
我通过使用以下代码弄明白了 受到帖子的启发:How do I get word wrap information with the new iOS 7 APIs?
- (void)focusOnWordAtIndex:(int)index {
NSAttributedString *s = [[NSAttributedString alloc] initWithString:self.textField.text
attributes:@{NSFontAttributeName:self.textField.font}];
NSTextContainer* tc = [[NSTextContainer alloc] initWithSize:CGSizeMake(CGFLOAT_MAX, self.frame.size.height)];
tc.lineFragmentPadding = 0.0;
NSLayoutManager* lm = [NSLayoutManager new];
NSTextStorage* tm = [[NSTextStorage alloc] initWithAttributedString:s];
[tm addLayoutManager:lm];
[lm addTextContainer:tc];
CGRect wordRect = [lm boundingRectForGlyphRange:[self rangeForWordAtIndex:index] inTextContainer:tc];
// Other code to focus....
}
- (NSRange)rangeForWordAtIndex:(int)index {
__block NSRange result;
__block int i = 0;
NSString *text = self.textField.text;
[text enumerateSubstringsInRange:NSMakeRange(0, text.length)
options:NSStringEnumerationByWords
usingBlock:^(NSString *substring,
NSRange substringRange,
NSRange enclosingRange,
BOOL *stop)
{
if (i >= index) {
result = substringRange;
*stop = YES;
}
i++;
}];
return result;
}