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