新手需要帮助:Bold Font&基于价值的文本颜色

时间:2014-01-14 20:15:17

标签: ios fonts colors

我想在下面创建sl.asl粗体,并根据它在下面的数值为它着色。有什么想法吗?

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateStyle:NSDateFormatterShortStyle];

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
}


// Configure the cell...
ServiceLevel *sl = (ServiceLevel *)[self.importedRows objectAtIndex:indexPath.row];
cell.textLabel.text = [NSString stringWithFormat:@"%@ - %@", sl.name , sl.asl];

return cell;
}

3 个答案:

答案 0 :(得分:1)

创建NSAttributedString并将其分配给cell.textLabel.attributedText。例如:

NSDictionary *attributes = @{
    NSForegroundColorAttributeName:[UIColor redColor],
    NSFontAttributeName:[UIFont fontWithName:@"Helvetica-Bold" size:16]
};

NSString *delimiter = @" - ";
NSString *text = [NSString stringWithFormat:@"%@%@%@", sl.name, delimiter, sl.asl];
NSMutableAttributedString *attributedText = [[NSMutableAttributedString alloc] initWithString:text];
[attributedText addAttributes:attributes range:NSMakeRange(sl.name.length + delimiter.length, sl.asl.length)];

cell.textLabel.attributedText = attributedText;

答案 1 :(得分:1)

更新代码 - 用于粗体化部分文本并根据数值更改颜色

在您发布有关stackoverflow的问题之前,请先进行一些初步研究,并向我们展示您过去尝试过的内容,以便我们相应地为您提供帮助。

您可以使用NSAttributedString将文本的一部分设置为粗体:     //要加粗字符串的一部分,您必须让它知道您希望粗体开始和结束的位置,因为您需要知道sl.asl变量的长度

NSMutableAttributedString * attributedAsl = [[NSMutableAttributedString alloc] initWithAttributedString:sl.asl];

NSString *delimiter = @" - "; //This is what will be written to separate sl.name and sl.asl 
NSString *begginingString = [NSString stringWithFormat:@"%@%@", delimiter, sl.name];
//What we dont want bolded
NSInteger startBoldFromEndOfBeginningString = [begginingString length]; 
//The length of text we want bolded - your sl.asl variable
NSInteger slAslLength = ((NSString)sl.asl).length;


UIFont *font= [UIFont fontWithName:@"Helvetica-Bold" size:25.0f];
[attributedAsl addAttribute:NSFontAttributeName value:font range:NSMakeRange(startBoldFromEndOfBeginningString, slAslLength)];

cell.textLabel.attributedText = attributedAsl;

然后你可以像这样设置文字颜色

cell.textLabel.textColor = [UIColor redColor];

现在,如果你想根据某些东西的数值更改textColor,那么你必须开始使用构成颜色值的RGB值。

[UIColor colorWithRed:1.0 green:0.0 blue:1.0 alpha:1.0];

确保将颜色均匀分布到所需颜色范围将有助于了解最高数量。

假设您在tableView中显示英语字母表,单元格总数将为26,并且您想要更改显示的每个单元格的文本颜色,一种解决方案是:< / p>

CGFloat maxNumber = 26; //total number of letters
CGFloat dynamicColor = 1.0/maxNumber * indexPath.row;

[UIColor colorWithRed:dynamicColor green:0.0 blue:1.0 alpha:1.0];

这将确保每个textColor对于显示的每个单元格都不同。

答案 2 :(得分:1)

NSAttributedString应该做的伎俩。

像:

    NSString *name = @"SampleName";
    NSUInteger asl = 2;
    NSString *t_string = [NSString stringWithFormat:@"%@ - %d", name , asl];

    NSUInteger t_nameLength = name.length;
    NSUInteger t_aslLength = 1;

    UIColor *t_color = nil;
    switch (asl) {
        case 1:
            t_color = [UIColor redColor];
            break;
        case 2:
            t_color = [UIColor greenColor];
            break;
        default:
            t_color = [UIColor blackColor];
            break;
    }

    NSMutableAttributedString *t_attributedString = [[NSMutableAttributedString alloc] initWithString:t_string];
    [t_attributedString addAttribute:NSFontAttributeName value:[UIFont fontWithName:@"Arial" size:14.0] range:NSMakeRange(0, t_nameLength)];
    [t_attributedString addAttribute:NSForegroundColorAttributeName value:[UIColor blackColor] range:NSMakeRange(0, t_nameLength)];
    [t_attributedString addAttribute:NSFontAttributeName value:[UIFont fontWithName:@"Arial-BoldMT" size:14.0] range:NSMakeRange(t_nameLength + 3, t_aslLength)];
    [t_attributedString addAttribute:NSForegroundColorAttributeName value:t_color range:NSMakeRange(t_nameLength + 3, t_aslLength)];

    cell.textLabel.attributedText = t_attributedString;