如何使用名称获取FontAwesomeKit的图像

时间:2015-05-16 11:57:55

标签: ios objective-c font-awesome

我正在使用FontAwesomeKit,这是iOS的绝佳工具,可以从字体中获取图标。但是,要调用的列表是预先定义的。

例如,我想获得飞机图标,我需要打电话:

[FAKFontAwesome planeIconWithSize:20];

但是,我希望能够使用名称进行呼叫。打电话使用:

[FAKFontAwesome getIconWithName:@"fa-plane"];

如何实现这一目标?

2 个答案:

答案 0 :(得分:0)

FAKFontAwesome对象继承自FAKIcon,它公开了以下方法:+ (instancetype)iconWithCode:(NSString *)code size:(CGFloat)size;

这不会像使用CSS lib一样使用代码/名称。但更确切地说,要传递unicode序列。因此对于' fa-plane'这将是:

[FAKFontAwesome iconWithCode:@"\uf072" size:20.];

必须使用unicode序列是相当不方便的,我想这就是为什么他们创建了很长的方法列表。

修改

想到了第二种方式。您可以使用NSSelectorFromString()动态构建方法调用。

示例:

SEL theSelector = NSSelectorFromString([NSString stringWithFormat:@"%@IconWithSize:", @"plane"]);
NSInvocation *anInvocation = [NSInvocation
            invocationWithMethodSignature:
            [FAKFontAwesome methodSignatureForSelector:theSelector]];

[anInvocation setSelector:theSelector];
[anInvocation setTarget:[FAKFontAwesome class]];
CGFloat size = 20;

[anInvocation setArgument:&size atIndex:2];


FAKFontAwesome* faIcon = nil;
[anInvocation invoke];

[anInvocation getReturnValue:&faIcon];


// Use faIcon here.

答案 1 :(得分:0)

我向开发者提交了一个问题,显然有人已经完成了这个问题并在之前的问题上解决了(我没有看到)。这是你如何完成(测试)。

NSString *iconName = @"globe";

NSMutableDictionary *allIcons = [NSMutableDictionary dictionaryWithDictionary:[FAKFontAwesome allIcons]];

for (NSString *key in [allIcons allKeys]) {
    allIcons[allIcons[key]] = key;
    [allIcons removeObjectForKey:key];
}

NSString *resultCode = [allIcons objectForKey:iconName];
FAKFontAwesome *icon = [FAKFontAwesome iconWithCode:resultCode size:TAB_ICON_SIZE];

参考:https://github.com/PrideChung/FontAwesomeKit/issues/37