首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >子类NSFont

子类NSFont
EN

Stack Overflow用户
提问于 2014-03-31 15:57:52
回答 1查看 697关注 0票数 0

我试图编写一些在iOS和OS之间工作的公共库,为了不让应用程序混乱,我在代码中添加了大量的#if TARGET_OS_IPHONE,我想我可以使用一个通用的.h同时对UIFont和NSFont进行子类,并为每个构建使用单独的.m文件。因此,我有下面的子类结构MyFent.h和MyFont_iOS.m和MyFont_OSX.m。每个目标都包含适当的.m文件。在iOS上可以很好地工作,但是在OSX上执行时,我会得到一个创建字体对象的EXC_BAD_ACCCES,其行如下

MyFont *myFont = MyFont fontWithName:@"Arial“大小:132.0;

我可以不使用子类NSFont吗?

下面是NSFont子类的基本代码示例(注意,到目前为止,子类中没有专门的代码。这只是一个基本子类)

MyFent-.h

代码语言:javascript
复制
#if TARGET_OS_IPHONE
@interface MyFont : UIFont
#else
@interface MyFont : NSFont
#endif
@end

MyFont_iOS.m

代码语言:javascript
复制
#import "MyFont.h"
@implementation MyFont
@end

MyFont_OSX.m

代码语言:javascript
复制
#import "MyFont.h"
@implementation MyFont
@end

试图使用子类字体(在iOS应用程序中-!)

代码语言:javascript
复制
#import "MyFont.h"
...
MyFont *myFont = [MyFont fontWithName:@"Arial" size:45.0];

尝试使用子类字体(在OS中!)

代码语言:javascript
复制
#import "MyFont.h"
...
MyFont *myFont = [MyFont fontWithName:@"Arial" size:132.0];

FYI -我也收到了这条线路的警告

使用'MyFont *‘类型的表达式初始化'NSFont *’的不兼容指针类型

因此,我肯定做错了什么,但不明白为什么它强迫我使用NSFont,但在UIFont上工作得很好。

谢谢您的指导!

EN

回答 1

Stack Overflow用户

发布于 2014-03-31 16:01:50

fontWithName返回NSFont/UIFont -固定的。它不能被子类化

即使它有效,它也不是定义的行为。

您可以做的是拥有一个保存平台特定字体的包装器。

例如:

代码语言:javascript
复制
@implementation MyFont {
    PlatformSpecificFont *_font
}
+ (instancetype)fontWithName:... {
    _font = [PlatformSpecificFont fontWithName:...];
    return self;
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22766388

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档