我正在尝试覆盖UIFont的systemFontOfSize方法,以返回给定字体大小的自定义字体。我的代码目前看起来像这样:
extension UIFont
{
class func systemFontOfSize(fontSize: CGFloat) -> UIFont
{
return UIFont(name: "HelveticaNeue", size: 10)!
}
}
但是,我无法覆盖该方法。使用上面显示的代码时,我收到以下错误:
"Method 'systemFontOfSize' with Objective-C selector 'systemFontOfSize:' conflicts with previous declaration with the same Objective-C selector"
添加覆盖时,错误是该方法没有覆盖任何内容。 有谁知道如何解决这个问题?
答案 0 :(得分:1)
如果符合您的需要,您可以按如下方式使用Objective C扩展名。
可以在此处找到与我的源代码作为答案相关的此技术的早期讨论:Is there a way to change default font for your application。
您所要做的就是使用上面链接中提到的代码实现该类,并在您的伞标题中包含以下头文件,以便能够在Swift代码中调用方法时应用代码。
标题文件UIFont+Utils.h
:
@interface UIFont (Utils)
+ (UIFont *)systemFontOfSize:(CGFloat)size;
+ (UIFont *)lightSystemFontOfSize:(CGFloat)size;
+ (UIFont *)boldSystemFontOfSize:(CGFloat)size;
+ (UIFont *)preferredFontForTextStyle:(NSString *)style;
@end
答案 1 :(得分:1)
您可以使用#selector
将UIFont
调用重定向到自定义函数。
Set a default font for whole iOS app? < p>
答案 2 :(得分:0)
要能够覆盖该函数,必须首先继承UIFont。你想做什么,是不可能的。你试图在扩展中重新定义功能。所以,我没有积极的信息,但这就是现实。
PS:如果您是目标C&#39;专家&#39;,可以使用某些黑客......
答案 3 :(得分:0)
class FontClass: UIFont{
override class func systemFontOfSize(fontSize: CGFloat) -> UIFont
{
return UIFont(name: "HelveticaNeue", size: 10)!
}
}
在项目中,您可以像这样使用它:
FontClass.systemFontOfSize(10)
希望可以帮到你!
答案 4 :(得分:0)