如何确定Objective-C中的Mac OSX计算机上是否安装了NSFont?
是否有方法检查系统是否安装了具有字符串名称的NSFont?检查此阵列中是否存在该NSFont:如何确定Objective-C中的Mac OSX计算机上是否安装了NSFont?,objective-c,cocoa,string,fonts,Objective C,Cocoa,String,Fonts,是否有方法检查系统是否安装了具有字符串名称的NSFont?检查此阵列中是否存在该NSFont: NSArray *fonts = [[NSFontManager sharedFontManager] availableFontFamilies]; 打电话 [fonts containsObject:@"Times"]; containsObject使用isEqual:方法比较两个对象。因为您知道字体数组中的每个对象都是NSString,所以您知道如果数组包含@“Times”,您将得到是,如果
NSArray *fonts = [[NSFontManager sharedFontManager] availableFontFamilies];
打电话
[fonts containsObject:@"Times"];
containsObject
使用isEqual:
方法比较两个对象。因为您知道字体
数组中的每个对象都是NSString
,所以您知道如果数组包含@“Times”
,您将得到是
,如果数组不包含则会得到否
。<
用于查找字体系列(可能由多个字体(样式)组成)
然后还可以检查粗体、斜体等(确切名称)
像
您可能还想使用(但请确保字体名称的格式正确)
请注意,这可能需要更多的资源
- (BOOL)isFontNameInstalledInSystem {
return ([NSFont fontWithName:self.fontName size:[NSFont systemFontSize]]) != nil;
}
如何检查数组?是否必须使用for语句?很抱歉,刚才在答案正文中添加了一个说明。这并不完全正确,因为您正在检查字体系列,而不是字体…请注意,字体系列可能有不同的字体(样式),如粗体、斜体,我们假设粗体可能尚未安装。如何使用swift执行此操作?在swift中,类似于这样的操作可以实现:NSFontManager.shared.availableMembers(“Times”)
NSFontDescriptor *fontDescriptor =
[NSFontDescriptor fontDescriptorWithFontAttributes:
@{ NSFontNameAttribute: @"Bank Gothic Medium" }];
NSArray *matches =
[fontDescriptor matchingFontDescriptorsWithMandatoryKeys: nil];
- (BOOL)isFontNameInstalledInSystem {
if (self.fontName == nil) {
return NO;
}
NSFontDescriptor *fontDescriptor = [NSFontDescriptor fontDescriptorWithFontAttributes:@{NSFontNameAttribute:self.fontName}];
NSArray *matches = [fontDescriptor matchingFontDescriptorsWithMandatoryKeys: nil];
return ([matches count] > 0);
}
- (BOOL)isFontNameInstalledInSystem {
return ([NSFont fontWithName:self.fontName size:[NSFont systemFontSize]]) != nil;
}