热门标签 | 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];

推荐阅读
  • 本文分享了作者在使用LaTeX过程中的几点心得,涵盖了从文档编辑、代码高亮、图形绘制到3D模型展示等多个方面的内容。适合希望深入了解LaTeX高级功能的用户。 ... [详细]
  • 本文探讨了如何使用Scrapy框架构建高效的数据采集系统,以及如何通过异步处理技术提升数据存储的效率。同时,文章还介绍了针对不同网站采用的不同采集策略。 ... [详细]
  • 2023年1月28日网络安全热点
    涵盖最新的网络安全动态,包括OpenSSH和WordPress的安全更新、VirtualBox提权漏洞、以及谷歌推出的新证书验证机制等内容。 ... [详细]
  • 本文介绍了如何使用 Python 的 Pyglet 库加载并显示图像。Pyglet 是一个用于开发图形用户界面应用的强大工具,特别适用于游戏和多媒体项目。 ... [详细]
  • 使用Python构建网页版图像编辑器
    本文详细介绍了一款基于Python开发的网页版图像编辑工具,具备多种图像处理功能,如黑白转换、铅笔素描效果等。 ... [详细]
  • 本文详细介绍如何在SSM(Spring + Spring MVC + MyBatis)框架中实现分页功能。包括分页的基本概念、数据准备、前端分页栏的设计与实现、后端分页逻辑的编写以及最终的测试步骤。 ... [详细]
  • 开发笔记:每篇半小时1天入门MongoDB——3.MongoDB可视化及shell详解
    开发笔记:每篇半小时1天入门MongoDB——3.MongoDB可视化及shell详解 ... [详细]
  • 本文详细探讨了编程中的命名空间与作用域概念,包括其定义、类型以及在不同上下文中的应用。 ... [详细]
  • 本文介绍如何通过Java代码调用阿里云短信服务API来实现短信验证码的发送功能,包括必要的依赖添加和关键代码示例。 ... [详细]
  • 探索CNN的可视化技术
    神经网络的可视化在理论学习与实践应用中扮演着至关重要的角色。本文深入探讨了三种有效的CNN(卷积神经网络)可视化方法,旨在帮助读者更好地理解和优化模型。 ... [详细]
  • 本文由公众号【数智物语】(ID: decision_engine)发布,关注获取更多干货。文章探讨了从数据收集到清洗、建模及可视化的全过程,介绍了41款实用工具,旨在帮助数据科学家和分析师提升工作效率。 ... [详细]
  • 本文探讨了如何利用 Android 的 Movie 类来展示 GIF 动画,并详细介绍了调整 GIF 尺寸以适应不同布局的方法。同时,提供了相关的代码示例和注意事项。 ... [详细]
  • 一、使用Microsoft.Office.Interop.Excel.DLL需要安装Office代码如下:2publicstaticboolExportExcel(S ... [详细]
  • 本文介绍了使用Python和C语言编写程序来计算一个给定数值的平方根的方法。通过迭代算法,我们能够精确地得到所需的结果。 ... [详细]
  • 解析Java虚拟机HotSpot中的GC算法实现
    本文探讨了Java虚拟机(JVM)中HotSpot实现的垃圾回收(GC)算法,重点介绍了根节点枚举、安全点及安全区域的概念和技术细节,以及这些机制如何影响GC的效率和准确性。 ... [详细]
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社区 版权所有