Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何添加带有下标的表视图节标题?_Ios_Objective C_Cocoa Touch_Uitableview - Fatal编程技术网

Ios 如何添加带有下标的表视图节标题?

Ios 如何添加带有下标的表视图节标题?,ios,objective-c,cocoa-touch,uitableview,Ios,Objective C,Cocoa Touch,Uitableview,在我的应用程序中,我有一个表视图,到目前为止我一直在使用故事板管理它(我已经通过故事板添加了节:行:单元格等),我以编程方式所做的唯一更改是通过实现以下内容将UIButton添加为节标题之一: - (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { if (section == 2) { UIView *view = [[UIView alloc]

在我的应用程序中,我有一个表视图,到目前为止我一直在使用故事板管理它(我已经通过故事板添加了节:行:单元格等),我以编程方式所做的唯一更改是通过实现以下内容将
UIButton
添加为节标题之一:

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
    if (section == 2) {
        UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 64)];

        UIButton *button1 = [UIButton buttonWithType:UIButtonTypeRoundedRect];

        [button1 setTitle:@"Hydro Volume" forState:UIControlStateNormal];

        button1.frame = CGRectMake(62.5, 5, 205, 44);

        [view addSubview:button1];

        [button1 addTarget: self
                    action: @selector(buttonClicked:)
          forControlEvents: UIControlEventTouchDown];

        return view;
    }

    return nil;
}
我目前的困境是,我必须添加一个包含下标的节标题,即:H2O

我不能直接在脚本检查器中添加下标,有人能告诉我怎么做吗


我查看了,但它不是我想要的,因为我需要能够将它添加到我的节标题中。

一个简单的解决方案是使用Unicode下标范围,U+2080到U+2089。示例:2小时₂ + O₂ -> 2小时₂O

您可以使用Unicode十六进制输入键盘布局、按住选项并键入十六进制数字(例如按住选项并键入“2080”表示₀”).

给定一个数字,您可以将其格式化为字符串作为下标,如下所示:

static const unichar kSubscriptZero = 0x2080;
int numberOfHydrogens = 2;
NSString *water = [NSString stringWithFormat:@"H%CO",
    kSubscriptZero + numberOfHydrogens];

一个简单的解决方案是使用Unicode下标范围,即U+2080到U+2089。示例:2 H₂ + O₂ -> 2小时₂O

您可以使用Unicode十六进制输入键盘布局、按住选项并键入十六进制数字(例如按住选项并键入“2080”表示₀”).

给定一个数字,您可以将其格式化为字符串作为下标,如下所示:

static const unichar kSubscriptZero = 0x2080;
int numberOfHydrogens = 2;
NSString *water = [NSString stringWithFormat:@"H%CO",
    kSubscriptZero + numberOfHydrogens];

我想这就是使用属性字符串的要点。我现在没有Xcode,所以可能会有bug:

if (section == whicheverSectionIndexIsCorrect) {
    NSString *plainText = @"2H2 + O2 → 2H2O";
    id subscriptOffset = @(-0.5); // random guess here, adjust offset as needed

    NSMutableAttributedString *text = [[NSMutableAttributedString alloc] initWithString:plainText];

    // apply attributes for each character to subscript
    [text addAttribute:(NSString *)kCTSuperscriptAttributeName 
                 value:subscriptOffset
                 range:NSMakeRange(2, 1)];
    [text addAttribute:(NSString *)kCTSuperscriptAttributeName
                 value:subscriptOffset
                 range:NSMakeRange(7, 1)];
    // etc.

    UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 64)];
    UILabel *label = [[UILabel alloc] init];
    label.attributedText = text;
    [view addSubview:label];
    return view;
}

编辑:可能只在OS X上可用:我还注意到有。我没有使用过它,所以不能说它是否有效,但如果它在iOS中有效并且理解下标,如果您从数据存储加载这些下标标签而不是硬编码它们,这可能会更简单。

我想这就是您要做的要点唱属性字符串。我现在没有Xcode,所以可能有bug:

if (section == whicheverSectionIndexIsCorrect) {
    NSString *plainText = @"2H2 + O2 → 2H2O";
    id subscriptOffset = @(-0.5); // random guess here, adjust offset as needed

    NSMutableAttributedString *text = [[NSMutableAttributedString alloc] initWithString:plainText];

    // apply attributes for each character to subscript
    [text addAttribute:(NSString *)kCTSuperscriptAttributeName 
                 value:subscriptOffset
                 range:NSMakeRange(2, 1)];
    [text addAttribute:(NSString *)kCTSuperscriptAttributeName
                 value:subscriptOffset
                 range:NSMakeRange(7, 1)];
    // etc.

    UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 64)];
    UILabel *label = [[UILabel alloc] init];
    label.attributedText = text;
    [view addSubview:label];
    return view;
}


编辑:可能仅在OS X上可用:我还注意到有。我没有使用过它,所以不能说它是否会工作,但如果它在iOS中工作并且理解下标,那么如果您从数据存储加载这些下标标签而不是硬编码,这可能会更简单。

UILabel有一个
attributedText
属性接受
nsattributestring
的y。因此,将节标题视图设置为UILabel(或包含UILabel的视图)使用attributedText?@esker,您是否介意向我展示一些此示例代码?UILabel有一个
attributedText
属性,它接受
NSAttributedString
。因此,您的节头视图是UILabel(还是包含UILabel的视图)使用AttributeText?@esker你介意给我看一些示例代码吗?非常确定HTML内容仅限于Mac。我很害怕。很高兴知道。@esker我尝试了这个,但我得到了以下生成警告:
不兼容的指针类型发送“const-CFStringRef”(也称为“const-struct u-CFString*const”)对于类型为“NSString*”的参数
,我的节头没有发生任何变化。我已经添加了适当的框架并导入了正确的头文件,有什么建议吗?我编辑了答案以包含一些
(NSString*)
强制转换似乎是必要的,并为下标偏移量选择了一个似乎正确的值。非常确定HTML内容仅适用于Mac。我对此感到害怕。很高兴知道。@esker我尝试了此操作,但收到以下生成警告:
不兼容的指针类型发送“const CFStringRef”(又名“const struct”\uuu CFString*const”)添加到类型为“NSString*”的参数中。
我的节头没有发生任何变化。我已经添加了适当的框架并导入了正确的头文件,有什么建议吗?我编辑了答案以包含一些
(NSString*)
cast似乎是必要的,并为下标偏移量选择了一个似乎正确的值。您能否发布一些示例代码,说明如何在我的场景中使用节标题文本来实现这一点?@robmayoffI认为这是一个比我发布的更好的解决方案。如何使用字母来实现这一点?而不是数字?你能不能发布一些示例代码,说明我如何在我的场景中使用章节标题文本来实现这一点?@robmayoffI认为这是一个比我发布的更好的解决方案。如何使用字母而不是数字来实现这一点?