如何覆盖Objective-C类功能斯威夫特?

问题描述 投票:0回答:5

我目前正试图重写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"

当添加覆盖,错误的是,该方法没有任何覆盖。有谁知道如何解决这个问题?

objective-c swift fonts override uifont
5个回答
1
投票

您可以使用目标C扩展如下,如果它符合您的需求。

与此相关的技术与我的源代码作为一个答案前面的讨论可以在这里找到:Is there a way to change default font for your application

所有你需要做的是落实与上面的链接中提到的代码的类,包括在你的伞头下面的头文件,以便能够使调用雨燕代码方法时,该代码被应用。

头文件UIFont+Utils.h

@interface UIFont (Utils)

+ (UIFont *)systemFontOfSize:(CGFloat)size;
+ (UIFont *)lightSystemFontOfSize:(CGFloat)size;
+ (UIFont *)boldSystemFontOfSize:(CGFloat)size;
+ (UIFont *)preferredFontForTextStyle:(NSString *)style;

@end

1
投票

您可以使用#selector重定向UIFont电话去自定义函数。

For best way how to replace font functions for whole iOS app, please check the below SO question, look for answer from - Javier Amor Penas: Set a default font for whole iOS app?

0
投票

class FontClass: UIFont{ override class func systemFontOfSize(fontSize: CGFloat) -> UIFont { return UIFont(name: "HelveticaNeue", size: 10)! } } 在项目中,你可以使用它像这样: FontClass.systemFontOfSize(10) 希望能帮助你!


0
投票

从扩展Apple's documentation

注意

扩展可以添加新的功能,以一个类型,但它们不能覆盖现有的功能。

您不能覆盖现有的方法中的分机,则只能添加新的。


0
投票

要能够覆盖功能,必须先继承UIFont。你有什么要做的,是不可能的。你想在扩展重新定义功能。所以,我没有积极的消息,但事实就是事实。

PS:如果你是一个Objective C“专家”,一些黑客也可...

© www.soinside.com 2019 - 2024. All rights reserved.