如何只加载Array中的自定义字体名称?

时间:2013-12-09 07:42:34

标签: ios iphone arrays custom-font

我在我的app.i中使用多个自定义字体知道如何添加自定义字体,但所有这些过程的可怕部分是我们要使用自定义字体,因为大多数自定义字体名称与文件不同我们正在app.here中使用我想解释我最近的例子,首先我在我的应用程序中添加了两个自定义字体文件 enter image description here

为了获得上述自定义字体名称,我尝试了这种方式

NSArray *familyNames = [[NSArray alloc] initWithArray:[UIFont familyNames]];

NSArray *fontNames;
NSInteger indFamily, indFont;
 FontnameArray=[[NSMutableArray alloc] init];
for (indFamily=0; indFamily<[familyNames count]; ++indFamily)
{
   fontNames = [[NSArray alloc] initWithArray:
                 [UIFont fontNamesForFamilyName:
                  [familyNames objectAtIndex:indFamily]]];
    for (indFont=0; indFont<[fontNames count]; ++indFont)
    {
        NSString *fullName = [NSString stringWithFormat:@"%@",[fontNames objectAtIndex:indFont]];
        [FontnameArray addObject:fullName];
        }
    }
[FontnameArray sortUsingSelector:@selector(localizedCaseInsensitiveCompare:)];
NSLog(@"    Font name: %@", FontnameArray);

上面的代码为我显示199个字体名称,所以我很难在199种字体中选择自定义字体名称,为了让我的疑问清楚,我只需将字体文件拖到字体书然后我得到了自定义字体的原始名称。

[UIFont fontWithName:@"Ethiopia Primary" size:20]];
[UIFont fontWithName:@"Ethiopia jiret" size:20]];

所以问题是如何在Array中获取所有自定义字体名称,而不是将每个字体文件拖放到Fontbook以获取orignal名称。

2 个答案:

答案 0 :(得分:1)

只需与iOS中存在的所有字体进行比较

*创建像this code这样的新项目,并将所有字体名称的数组写入plist文件

- (void)writeAlliOSFontsToPlist{
    NSArray *fontFamilies = [UIFont familyNames];
    [self savePlist:@"AllFont" fromArray:fontFamilies];
}

- (NSString *) getFilePathForPlist:(NSString *) plistName {
    // placeholder
    NSArray *pathArray = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    return [[pathArray objectAtIndex:0] stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.plist",plistName]];
}

-(void) savePlist:(NSString *)plistName fromArray:(NSArray *)array {
    [array writeToFile:[self getFilePathForPlist:plistName] atomically:YES];
}

打开您的模拟器目录并将this plist复制到您的App捆绑包。 然后将此plist读取到一个数组,并通过this code

与所有字体进行比较
-(void)dumpCustomFonts{
    NSArray *iOSFontsArray = [NSArray arrayWithContentsOfFile:
                              [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:
                               @"AllFont.plist"]];
    NSMutableArray *fontFamilies = (NSMutableArray *)[UIFont familyNames];
    [fontFamilies removeObjectsInArray:iOSFontsArray];
    NSLog(@"%@",fontFamilies);
}

我已经在我的测试项目中完成了所有操作,您只需复制并粘贴它即可。

答案 1 :(得分:0)

您应该在.plist中添加自定义字体

  

1)使用键"Fonts provided by application"添加新条目。

     

2)现在将每个带有扩展名的自定义字体文件名添加到此数组中,如:

enter image description here

现在您可以通过以下方式检索所有自定义字体:

NSString *path = [[NSBundle mainBundle] bundlePath];
NSString *finalPath = [path stringByAppendingPathComponent:@"Info.plist"];
NSDictionary *plistData = [[NSDictionary dictionaryWithContentsOfFile:finalPath] retain];

fontFamilyNames = [plistData valueForKey:@"UIAppFonts"];
NSLog(@"%@",fontFamilyNames);

NSString *fontFamilyName = [[fontFamilyNames objectAtIndex:index] stringByDeletingPathExtension];
UILabel *fontNameLabel = [[[UILabel alloc] init] autorelease];        
fontNameLabel.text = @"Preview Text";
fontNameLabel.font = [UIFont fontWithName:fontFamilyName size:20.0];