【问题标题】:Finding bounding rect for word at index in a UITextField在 UITextField 中的索引处查找单词的边界矩形
【发布时间】:2014-07-02 17:21:14
【问题描述】:

我有一个 UITextField,里面有一些单词,我想找出某个索引处单词的边界矩形。

最好给出一些直观的例子,所以我画了一个草图来展示我想要的。

假设我想要 UITextField/UILabel 的“nice”(相对)边界矩形,所以我会调用一些方法,例如

[self boundingRectForWordAtIndex:2]

它会给我你在图片中看到的矩形

【问题讨论】:

    标签: ios objective-c cocoa-touch textkit


    【解决方案1】:

    我用下面的代码弄明白了 灵感来自线程: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;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-12
      • 1970-01-01
      • 1970-01-01
      • 2012-04-30
      • 1970-01-01
      • 2014-02-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多