自定义 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的高度

自定义 UITableViewCell 的动态高度问题

动态计算自定义 UITableViewCell 的高度

IOS:具有自定义 uitableviewcell 的动态高度

在自定义 UITableViewCell 中动态显示按钮