在我的应用程序中,用户将键入他想要的任何内容,并且可以将文本设置为Bold,Italic和Underline .
I am able to do the Text - 粗体,斜体和下划线 .
但 I need to find which Text (or Character) 是来自 user typed 的属性字符串的 Bold, Italic and Underline .
任何类型的链接,教程,代码都会有很大的帮助 .
EDIT :
我需要这样的结果......
如果字符6是斜体,则打印斜体 .
如果字符14是粗体,则打印粗体 .
我需要将所有文本从Calibri字体系列转换为HelveticaNeue字体系列而不更改其属性 .
1 回答
您可以使用此代码枚举属性(整个范围) .
对于特定范围,您必须将代码
NSMakeRange(0, [attrStr lenght])
更改为您需要的范围 .编辑后,您的具体需求,此代码应该做的工作:
从你的评论中,你可能会看到更复杂的东西,所以我会给你一些想法/提示来做/检查 . 您只需完成我以前的代码即可管理所有案例 .
•案例:没有字体 .
你只需检查
currentFont
是否为零 . 如果是,您可以设置所需内容 . 由于没有斜体/粗体属性(因为它们是字体中的"included"),我建议您设置为newFont
:HelveticaNeue .•案例:它更加复杂 .
我已经使用过了,在这里我得到了:字体名称(这是
postscript name
)是这样的,用于HelveticaNeue(如给出的例子):所以你能想到的第一件事是:我只需要检查名称的后缀(使用
hasSuffix:
) . 但那可能会出错 .实际上,有些字体有代工后缀(我找到的是LT,MT和EF) .
好吧,例如:
Times New Roman "real name"是TimesNewRomanPSMT .
它的斜体版本是TimesNewRomanPS-ItalicMT
这就是为什么我们必须检查它是否有代工厂后缀,因为TimesNewRomanPSMT-Italic赢了't work (since it doesn' t,如果你尝试设置一个带有这个名字的字体,它将是零) .
所以,据我所知,至于我可能有一些经验和我见过的案例,你可以做什么:检查
[currentFont name]
是否包含:BoldItalic
,Italic
或Bold
,使用NSRegularExpression
或rangeOfString:
. 请注意,我建议之前检查BoldItalic
,因为Italic
可能"hides"Bold
就在它之前,并且Bold
可能"hides"Italic
就在它之后 .为了做到这一点,我建议你创建一个像这样(或这种风格)的方法:
检查我之前提到的所有情况 .
因此,从前面的代码中,您只需要替换为Calibri特定工作的
if
测试:现在你可能想要做的第三部分(并将它们添加到你的测试中):字体的
Black
案例是否想要作为Bold
进行管理?好吧,Helvetica Neue
有"property",但是您可能想直接使用black
属性Helvetica Neue
,并且可能想要检查currentFont
是否有它(再次,另一种情况) .编辑:您可以使用自iOS7以来我们可以使用
UIFontDescriptor
. 这是你可以做的:注意:我没有检查所有的情况(如果您的自定义系列没有匹配的字体,它返回什么?等等),但如果你不做太复杂的话,这可能是一个不错的插件的东西 .