gpt4 book ai didi

ios - NSMutableAttributedString 转换为字符串,同时保持格式

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:43:19 25 4
gpt4 key购买 nike

我想为我的 TableView 分配一个标题标题,但我希望标题分为两行。第二行的字体应小于第一行。

我正在尝试使用 NSMutableAttributedString,但在方法中:

-(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section

但它返回一个 NSString 而不是 NSMutableAttributedString

有什么方法可以将 NSMutableAttributedString 转换为 NSString,同时保持字符串的格式?

这是我的代码:

-(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section{
NSString *title = @"";
title = @"Top Line \n";
if(_favouriteLocations.count == 0){
title = [title stringByAppendingString:@"Smaller font Bottom Line"];
}
NSMutableAttributedString *attString =[[NSMutableAttributedString alloc] initWithString:title];
NSRange range = [title rangeOfString:@"Smaller"];

[attString setAttributes:@{NSFontAttributeName:@"8"} range:NSMakeRange(range.location, title.length - range.location)];

NSLog(@"%@", attString);
title = [attString string];

return title;
}

最佳答案

使用 tableView:titleForHeaderInSection: 无法做到这一点方法。您需要使用 tableView:viewForHeaderInSection:这是一个 UITableViewDelegate方法并返回 UILabelattributedText设置

-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {

NSString *title = @"";
title = @"Top Line \n";
if(_favouriteLocations.count == 0){
title = [title stringByAppendingString:@"Smaller font Bottom Line"];
}
NSMutableAttributedString *attString =[[NSMutableAttributedString alloc] initWithString:title];
NSRange range = [title rangeOfString:@"Smaller"];

[attString setAttributes:@{NSFontAttributeName:@"8"} range:NSMakeRange(range.location, title.length - range.location)];

UILabel *titleLabel = [UILabel new];
titleLabel.attributedText = attString;

return titleLabel;
}

如果您有很多部分,您还可以使用较新的 UITableViewHeaderFooterView类和 dequeue那。该 View 有一个 textLabel属性,就像上面一样,您可以在其上设置 attributedText。它的代码有点多,但效率更高,因为您不会每次都返回新创建的 View 。

static NSString *const HeaderCellId = @"header_id";

-(void)viewDidLoad
{
[super viewDidLoad];

// Setup table view
[tableView registerClass:[UITableViewHeaderFooterView class] forHeaderFooterViewReuseIdentifier:HeaderCellId];
}

-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {

NSString *title = @"";
title = @"Top Line \n";
if(_favouriteLocations.count == 0){
title = [title stringByAppendingString:@"Smaller font Bottom Line"];
}
NSMutableAttributedString *attString =[[NSMutableAttributedString alloc] initWithString:title];
NSRange range = [title rangeOfString:@"Smaller"];

[attString setAttributes:@{NSFontAttributeName:@"8"} range:NSMakeRange(range.location, title.length - range.location)];

UITableViewHeaderFooterView *view = [tableView dequeueReusableHeaderFooterViewWithIdentifier:HeaderCellId];

view.textLabel.attributedText = attString;

return view;
}

编辑:

正如@PabloRomeu 在评论中指出的那样 tableView:viewForHeaderInSection: 仅在 tableView:heightForHeaderInSection: 时有效实现返回一个非零值。

-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
return 80;
}

关于ios - NSMutableAttributedString 转换为字符串,同时保持格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23132831/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com