我正在使用FontAwesomeKit,这是iOS的绝佳工具,可以从字体中获取图标。但是,要调用的列表是预先定义的。
例如,我想获得飞机图标,我需要打电话:
[FAKFontAwesome planeIconWithSize:20];
但是,我希望能够使用名称进行呼叫。打电话使用:
[FAKFontAwesome getIconWithName:@"fa-plane"];
如何实现这一目标?
答案 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];