自定义 uitableviewcell 中的动态标签数
Posted
技术标签:
【中文标题】自定义 uitableviewcell 中的动态标签数【英文标题】:Dynamic Number of UILabels in custom tableviewcell 【发布时间】:2016-09-21 13:39:40 【问题描述】:我创建了一个自定义表格视图单元格,我想在该单元格中显示一些字符串。我从后端获取字符串,因此我不知道需要多少标签。我试图在一个标签中连接字符串并实现如下,但是我想在字符“:”之后显示具有不同属性的字符串。
for (AttributesModel* attribute in model.attributes)
NSString *attributeName = attribute.name;
attributeString = [[attributeString stringByAppendingString: attributeName] mutableCopy];
attributeString = [[attributeString stringByAppendingString: @" : "] mutableCopy];
for (NSDictionary *value in attribute.options)
attributeString = [[attributeString stringByAppendingString: [value objectForKey:@"name"] ] mutableCopy];
attributeString = [[attributeString stringByAppendingString: @", "] mutableCopy];
attributeString = [[attributeString stringByAppendingString: @"\n"] mutableCopy];
我无法更改位于字符“:”之后的字符串的属性。 有没有办法做到这一点?我可以在单元格中创建动态数量的标签还是只更改仅位于“:”之后的字符串的属性?
【问题讨论】:
【参考方案1】:听起来您想更改属性,例如 UILabel 中一段文本的格式。你可以这样做:
-
创建字符串的属性可变副本(也就是将 NSString 转换为 NSMutableAttributedString)。
更改此副本部分的属性。
将标签的
attributedText
属性设置为属性字符串。
NSString *myString = @"This is my string";
NSAttributedString *attributedString = [[NSAttributedString alloc] initWithString:myString];
NSMutableAttributedString *mutableAttributedString = [attributedString mutableCopy];
// The range of text to change, i.e. start from the 5th index
// (starting from 0 like arrays), and continue for 2 characters:
NSRange rangeOfSecondWord = NSMakeRange(5, 2);
// The list of attributes to apply to that range:
NSDictionary *myAttributes = @
NSForegroundColorAttributeName : [UIColor redColor],
;
// Actually apply the attributes:
[mutableAttributedString setAttributes:myAttributes range:rangeOfSecondWord];
// Set the text of the label to the attributed string:
myLabel.attributedText = mutableAttributedString;
有关您可以在字典中设置的属性列表,请参阅Character Attributes reference。
由于您正在下载字符串,因此您可能事先不知道范围。由于您正在连接它们,因此您可以通过以下方式动态查找范围:
NSString *stringOne = @"My name is ";
NSString *stringTwo = @"John Citizen";
NSString *joinedStrings = [stringOne stringByAppendingString:stringTwo];
NSRange rangeOfStringTwo = [joinedStrings rangeOfString:stringTwo];
【讨论】:
以上是关于自定义 uitableviewcell 中的动态标签数的主要内容,如果未能解决你的问题,请参考以下文章
自定义 UITableViewCell 中标签的自动布局优先级
Swift中基于标签文本长度的动态自定义UITableViewCell的高度