- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我想为我的 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
方法并返回 UILabel
与 attributedText
设置
-(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/
我想将一个 NSMutableAttributedString 中的所有属性复制到一个新的中。我试过的代码是这样的: [attrStr enumerateAttribute:NSFontAttribu
我正在尝试更改应在用户界面中显示的标签的字体。我用过这行: let myAttribute = [ NSFontAttributeName: UIFont(name: "cirth1", size:
我使用 UIlabel 创建了一个 xib 文件。我想为 UILabel 添加行距。我编写了下面的代码,但它不会改变行之间的行间距。 (我尝试使用属性编辑器,但没有解决)有什么问题吗? 该代码适用于其
我有一个带有如下所示字符串的标签。我希望 SecondVariable 具有不同的颜色。我想我明白如何改变颜色。我的问题是获取 secondVariable 的范围。 let str = "\(fir
我制作了一个 NSMutableAttributedString 对象,它由 2 个不同的 NSMutableAttributedString 对象组成: NSMutableAttributedStr
let text = "By accepting you agree to our Terms of Service and Privacy Policy." let attr = NSMutabl
帮助! 崩溃发生在: [emtionString replaceCharactersInRange:range withString:imageAndRangeDicArray[i][@"image"
我在下面有一个方法,我想用它来更改 UILabel 文本的最后 6 个字符的颜色,这将是括号中的日期,即 (1999 )。首先,我设置了 tableViewCell 的文本,然后获取了 attribu
我在设置此 NSMutableAttributedString 时对范围做了一些错误(我认为)。谁能告诉我为什么这会导致我的程序崩溃?在我看来是对的,但我显然错了!谢谢。 NSString *plac
我正在做类似 facebook 的标记功能,我已经可以标记用户了。我可以这样展示。它是由这段代码完成的。 NSMutableAttributedString * string = [[NSMutabl
我只是想知道如何制作 NSMutableAttributedString 的副本。我有一个名为 text 的属性,我想在某个时间点保存它的内容,并在发生某些事情时恢复它。我尝试创建一个名为 textC
以下代码在 iOS 上不断崩溃。请帮我找出这个错误的确切原因。 @try { dispatch_async(dispatch_get_global_que
我正在使用 SplitViewController; master 是带有一系列 RightDetail 单元格的 tableView,其属性字符串是通过值设置弹出窗口的回调设置的。 通过设置单元格
我正在使用两个 NSMutableAttributedString 并从这两个中创建一个 NSMutableAttributedString。我想限制两个 attributedString 的不同最大
我正在尝试设置数组中所有范围的颜色,但出现此错误。我不明白为什么。范围都有效。我什至尝试手动插入一个范围来测试它。谢谢。 CGContextSetFillColorWithColor:无效上下文 0x
我需要用字符串 productDesc 初始化 NsmutableAttributedString,但是代码崩溃 attrStrInfoLabel= [[NSMutableAttributedStr
我们的 iOS 应用程序中有一个简单的标记解析器,它获取带有类似 HTML 标签的文本,并通过遍历简单 NSString 中的每个字符将其转换为 NSAttributedString并生成一个 NSM
这个问题在这里已经有了答案: iOS ttf fonts only partially work (3 个答案) 关闭 5 年前。 这很奇怪。 这个有效: titleLabel.font = UIF
我有一个椭圆形的文本路径。对于填充路径,我使用了 NSMutableAttributedString: UIFont *font = [UIFont fontWithName:@"font name"
更新: 我创建了一个非常简单的独立项目来演示该错误。如果有人想拉同样的东西,看看他们是否能发现我哪里出错了,我一定会很感激。没有太多代码可以浏览。公共(public) repo 在这里: https:
我是一名优秀的程序员,十分优秀!