热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

在iOS7/iOS8中设计UILabel的文本最简单的方法。-EasiestwaytostylethetextofanUILabeliniOS7/iOS8

ImlearningobjectivecalittlebittowriteaniPadapp.Ivemostlydonesomehtml5phpprojects

I'm learning objective c a little bit to write an iPad app. I've mostly done some html5/php projects and learned some python at university. But one thing that really blows my mind is how hard it is to just style some text in an objective C label.

我正在学习objective c,写一个iPad应用程序。我主要做了一些html5/php项目,在大学里学了一些python语言。但是有一件事让我很震惊,那就是在objective - C标签中对一些文本进行样式化是多么的困难。

Maybe I'm coming from a lazy markdown generation, but really, if I want to let an UILabel look like:

也许我来自一个懒惰的下等一代,但真的,如果我想让UILabel看起来像:

Objective: Construct an equilateral triangle from the line segment AB.

目的:从线段AB构造等边三角形。

In markdown this is as simple as:

在markdown中,这很简单:

**Objective:** Construct an *equilateral* triangle from the line segment AB.

**目的:** *从线段AB构造一个*等边*三角形。

Is there really no pain free objective C way to do this ? All the tutorials I read really wanted me to write like 15 lines of code. For something as simple as this.

真的没有无痛目标C方法来做这个吗?我读过的所有教程都希望我写15行代码。对于像这样简单的事情。

So my question is, what is the easiest way to do this, if you have a lot of styling to do in your app ? Will styling text become more natural with swift in iOS8 ?

我的问题是,如果你的应用中有很多样式,最简单的方法是什么?在iOS8中使用swift样式文本会更自然吗?

2 个解决方案

#1


6  

You can use NSAttributedString's data:options:documentAttributes:error: initializer (first available in iOS 7.0 SDK).

您可以使用NSAttributedString的data:options:documentAttributes:error: initializer(在iOS 7.0 SDK中首先可用)。

import UIKit

let htmlString = "Objective: Construct an equilateral triangle from the line segment AB."
let htmlData = htmlString.dataUsingEncoding(NSUTF8StringEncoding)

let optiOns= [NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType]
var error : NSError? = nil

let attributedString = NSAttributedString(data: htmlData, options: options, documentAttributes: nil, error: &error)

if error == nil {
    // we're good
}

Note: You might also want to include NSDefaultAttributesDocumentAttribute option in the options dictionary to provide additional global styling (such as telling not to use Times New Roman).

注意:您可能还希望在options字典中包含NSDefaultAttributesDocumentAttribute选项,以提供附加的全局样式(例如告诉不使用Times New Roman)。

Take a look into NSAttributedString UIKit Additions Reference for more information.

查看NSAttributedString UIKit添加引用以获得更多信息。

#2


1  

I faced similar frustrations while trying to use attributed text in Xcode, so I feel your pain. You can definitely use multiple NSMutableAttributedtext's to get the job done, but this is very rigid.

我在尝试在Xcode中使用带属性的文本时遇到了类似的挫折,所以我感到您的痛苦。你可以使用多个NSMutableAttributedtext来完成这项工作,但这是非常严格的。

UIFont *normalFOnt= [UIFont fontWithName:@"..." size:20];
UIFont *boldFOnt= [UIFont fontWithName:@"..." size:20];
UIFont *italicizedFOnt= [UIFont fontWithName:@"..." size:20];
NSMutableAttributedString *total = [[NSMutableAttributedString alloc]init];

NSAttributedString *string1 = [[NSAttributedString alloc] initWithString:[NSString stringWithFormat:@"Objective"] attributes:@{NSFontAttributeName:boldFont}];

NSAttributedString *string2 = [[NSAttributedString alloc] initWithString:[NSString stringWithFormat:@": Construct an "] attributes:@{NSFontAttributeName:normalFont}];

NSAttributedString *string3 = [[NSAttributedString alloc] initWithString:[NSString stringWithFormat:@"equilateral "] attributes:@{NSFontAttributeName:italicizedFont}];

NSAttributedString *string4 = [[NSAttributedString alloc] initWithString:[NSString stringWithFormat:@"triangle from the line segment AB."] attributes:@{NSFontAttributeName:normalFont}];

[total appendAttributedString:string1];
[total appendAttributedString:string2];
[total appendAttributedString:string3];
[total appendAttributedString:string4];

[self.someLabel setAttributedText: total];

Another option is to use NSRegularExpression. While this will require more lines of code, it is a more fluid way of bolding, changing color, etc from an entire string at once. For your purposes however, using the appendAttributedString will be the shortest way with a label.

另一种选择是使用NSRegularExpression。虽然这将需要更多的代码行,但这是一种更灵活的方法,可以同时从整个字符串中进行粗体、更改颜色等操作。但是,出于您的目的,使用appendAttributedString是使用标签的最短路径。

    UIFont *normalFOnt= [UIFont fontWithName:@"..." size:20];
    UIFont *boldFOnt= [UIFont fontWithFamilyName:@"..." size: 20];
    UIFont *italicizedFOnt= [UIFont fontWithFamilyName:@"..." size: 20];

    NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:[NSString stringWithFormat: @"Objective: Construct an equilateral triangle from the line segment AB."] attributes:@{NSFontAttributeName:normalFont}];

    NSError *regexError;

    NSRegularExpression *regex1 = [NSRegularExpression regularExpressionWithPattern:@"Objective"
                                                                              options:NSRegularExpressionCaseInsensitive error:®exError];
    NSRegularExpression *regex2 = [NSRegularExpression regularExpressionWithPattern:@"equilateral"
                                                                             options:NSRegularExpressionCaseInsensitive error:®exError];
    if (!regexError)
    {
        NSArray *matches1 = [regex1 matchesInString:[attributedString string]
                                                options:0
                                                  range:NSMakeRange(0, [[attributedString string] length])];
        NSArray *matches2 = [regex2 matchesInString:[attributedString string]
                                                options:0
                                                  range:NSMakeRange(0, [[attributedString string] length])];

        for (NSTextCheckingResult *aMatch in matches1)
        {
            NSRange matchRange = [aMatch range];
            [attributedString setAttributes:@{NSFontAttributeName:boldFont}
                                      range:matchRange];
        }
        for (NSTextCheckingResult *aMatch in matches2)
        {
            NSRange matchRange = [aMatch range];
            [attributedString setAttributes:@{NSFontAttributeName:italicizedFont}
                                      range:matchRange];

        }

    [self.someLabel setAttributedText: attributedString];

推荐阅读
  • 本文详细探讨了 Django 的 ORM(对象关系映射)机制,重点介绍了其如何通过 Python 元类技术实现数据库表与 Python 类的映射。此外,文章还分析了 Django 中各种字段类型的继承结构及其与数据库数据类型的对应关系。 ... [详细]
  • 解决JAX-WS动态客户端工厂弃用问题并迁移到XFire
    在处理Java项目中的JAR包冲突时,我们遇到了JaxWsDynamicClientFactory被弃用的问题,并成功将其迁移到org.codehaus.xfire.client。本文详细介绍了这一过程及解决方案。 ... [详细]
  • 本文介绍了如何使用 Python 的 Bokeh 库在图表上绘制菱形标记。Bokeh 是一个强大的交互式数据可视化工具,支持丰富的图形自定义选项。 ... [详细]
  • 本文将介绍网易NEC CSS框架的规范及其在实际项目中的应用。通过详细解析其分类和命名规则,探讨如何编写高效、可维护的CSS代码,并分享一些实用的学习心得。 ... [详细]
  • 本文将深入探讨如何在不依赖第三方库的情况下,使用 React 处理表单输入和验证。我们将介绍一种高效且灵活的方法,涵盖表单提交、输入验证及错误处理等关键功能。 ... [详细]
  • Ulysses Mac v29:革新文本编辑与写作体验
    探索Ulysses Mac v29,这款先进的纯文本编辑器为Mac用户带来了全新的写作和编辑环境。它不仅具备简洁直观的界面,还融合了Markdown等标记语言的最佳特性,支持多种格式导出,并提供强大的组织和同步功能。 ... [详细]
  • 本文详细探讨了JDBC(Java数据库连接)的内部机制,重点分析其作为服务提供者接口(SPI)框架的应用。通过类图和代码示例,展示了JDBC如何注册驱动程序、建立数据库连接以及执行SQL查询的过程。 ... [详细]
  • MySQL索引详解与优化
    本文深入探讨了MySQL中的索引机制,包括索引的基本概念、优势与劣势、分类及其实现原理,并详细介绍了索引的使用场景和优化技巧。通过具体示例,帮助读者更好地理解和应用索引以提升数据库性能。 ... [详细]
  • 本文将深入探讨PHP编程语言的基本概念,并解释PHP概念股的含义。通过详细解析,帮助读者理解PHP在Web开发和股票市场中的重要性。 ... [详细]
  • 解决网站乱码问题的综合指南
    本文总结了导致网站乱码的常见原因,并提供了详细的解决方案,包括文件编码、HTML元标签设置、服务器响应头配置、数据库字符集调整以及PHP与MySQL交互时的编码处理。 ... [详细]
  • PHP数组平均值计算方法详解
    本文详细介绍了如何在PHP中计算数组的平均值,涵盖基本概念、具体实现步骤及示例代码。通过本篇文章,您将掌握使用PHP函数array_sum()和count()来求解数组元素的平均值。 ... [详细]
  • Startup 类配置服务和应用的请求管道。Startup类ASP.NETCore应用使用 Startup 类,按照约定命名为 Startup。 Startup 类:可选择性地包括 ... [详细]
  • 自己用过的一些比较有用的css3新属性【HTML】
    web前端|html教程自己用过的一些比较用的css3新属性web前端-html教程css3刚推出不久,虽然大多数的css3属性在很多流行的浏览器中不支持,但我个人觉得还是要尽量开 ... [详细]
  • Unity编辑器插件:NGUI资源引用检测工具
    本文介绍了一款基于NGUI的资源引用检测工具,该工具能够帮助开发者快速查找和管理项目中的资源引用。其功能涵盖Atlas/Sprite、字库、UITexture及组件的引用检测,并提供了替换和修复功能。文末提供源码下载链接。 ... [详细]
  • 本文旨在提供一套高效的面试方法,帮助企业在短时间内找到合适的产品经理。虽然观点较为直接,但其方法已被实践证明有效,尤其适用于初创公司和新项目的需求。 ... [详细]
author-avatar
手机用户2502922083
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有