如何在UITableViewCell上使用多种颜色制作textLabel?

时间:2015-07-21 06:42:59

标签: ios objective-c uitableview uisearchbar

我正在使用UITableview列出人名,并实施UISearchbar来搜索不同的名称。我想在用户搜索特定项目时更改UITableViewCell上的textLabel颜色,例如当我在搜索栏上输入名称“Ant”时,需要在UItableview上更改“Ant”的颜色。请帮帮我。

4 个答案:

答案 0 :(得分:0)

您需要查看使用NSAttributedString指定文本的颜色。您需要在搜索条件中的每次更改时处理可见单元格,并检查何时配置要显示的单元格,在名称字符串中查找搜索文本,并为找到的范围设置适当的格式属性。

答案 1 :(得分:0)

您可以使用以下方法来满足您的要求。

- (NSAttributedString *)highlightText:(NSString *)textToBeHighlighted inString:(NSString *)fullString {
    NSDictionary *attributeForFullText = @{
                                    NSForegroundColorAttributeName  : [UIColor blackColor],
                                    NSFontAttributeName             : [UIFont systemFontOfSize:10.0f]
                                    // And more......
                                    };
    NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:fullString attributes:attributeForFullText];


    [attributedString addAttribute:NSForegroundColorAttributeName value:[UIColor redColor] range:[fullString rangeOfString:textToBeHighlighted]];

    /* you can use the above statement to do single style, 
    but if you want to do something more like size, font, alignment etc. 
    then you can do by below */

    [attributedString addAttributes:dictionary_with_more_style range:[fullString rangeOfString:textToBeHighlighted]];
    return attributedString;
}

只需从cellForRowAtIndexPath

中拨打电话即可
UILabel *titleLabel;
NSString *fullTitle;
NSString *searchString;

[titleLabel setAttributedText:[self highlightText:searchString inString:fullTitle];

答案 2 :(得分:0)

您可以使用attributedText的{​​{1}}属性。这装饰了标签上的文字。为UILabel创建一个类别并编写方法并执行以下操作:

UITableViewCell

在viewController的@implementation UITableViewCell(asdf) - (void)setText:(NSString *)text withMatchingText:(NSString *)matchingText; { // Set the default text color to the label text. self.textLabel.textColor = // Default text color if (matchingText.length > 0) { // Create the color for the matching text. UIColor *matchingColor = // Text color for the matching text, eg. "Ant" //Find the range of the matching text from the whole text. NSRange firstMatchingRange = [text rangeOfString:matchingText options:NSCaseInsensitiveSearch]; // Create an attributed string with matching color for your matching text on the whote text. NSMutableAttributedString *mString = [[NSMutableAttributedString alloc] initWithString:text]; [mString addAttribute:NSForegroundColorAttributeName value:matchingColor range:firstMatchingRange]; self.textLabel.attributedText = mString; }else { self.textLabel.text = text; } } 方法中执行以下操作:

tableView:cellForRowAtIndexPath:

NSString *text = // the name property cell setText:text withMatchingText:self.searchBar.text]; 是您在与Storyboard / xib上的搜索栏相关联的ViewController上的self.searchBar类型的属性。

上面的代码确实如此,如果你的搜索栏有文本,那么它将UISearchBar设置为匹配的文本(例如Ant),另一个字母(ony)将是默认颜色。如果没有更多匹配的文本,则整个文本将以默认文本颜色显示。

这可能会对你有帮助。

答案 3 :(得分:0)

检查此代码。它可以解决您的问题。 将此代码放在控制器的tableView:cellForRowAtIndexPath:方法中。

NSString  *title = @"Test this answer";
NSString *searchText = @"ans";

NSMutableAttributedString *originalString = [[NSMutableAttributedString alloc] initWithString:title];

NSRange range = [title rangeOfString:searchText];

if (range.location == NSNotFound) {
    NSLog(@"No match found");
}
else {
    NSLog(@"Found the range of the substring at (%lu, %lu)", (unsigned long)range.location, range.location + range.length);
    [originalString addAttribute:NSForegroundColorAttributeName value:[UIColor redColor] range:range];
}

cell.lbl_Title.attributedText = originalString;