您的位置:首页 > 移动开发 > IOS开发

全局修改字体

2016-05-13 21:23 656 查看
全局修改字体可以在myWillMoveToSuperview中修改

具体代码如下:

@implementation UILabel (myFont)

+ (void)load {

    //获得viewController的生命周期方法的selector

    SEL systemSel = @selector(willMoveToSuperview:);

    //自己实现的将要被交换的方法的selector

    SEL swizzSel = @selector(myWillMoveToSuperview:);

    //两个方法的Method

    Method systemMethod = class_getInstanceMethod([self class], systemSel);

    Method swizzMethod = class_getInstanceMethod([self class], swizzSel);

    //首先动态添加方法,实现是被交换的方法,返回值表示添加成功还是失败

    BOOL isAdd = class_addMethod(self, systemSel, method_getImplementation(swizzMethod), method_getTypeEncoding(swizzMethod));

    if (isAdd) {

        //如果成功,说明类中不存在这个方法的实现

        //将被交换方法的实现替换到这个并不存在的实现

        class_replaceMethod(self, swizzSel, method_getImplementation(systemMethod), method_getTypeEncoding(systemMethod));

    } else {

        //否则,交换两个方法的实现

        method_exchangeImplementations(systemMethod, swizzMethod);

    }

}

- (void)myWillMoveToSuperview:(UIView *)newSuperview {

    [self myWillMoveToSuperview:newSuperview];

    

    

    if (newSuperview == nil ) {

        return ;

    }

    

    if ([newSuperview isKindOfClass:[UITextField class]]){

        UITextField* tf = (UITextField*)newSuperview;

        self.font = [UIFont fontWithName:tf.font.fontName size:tf.font.pointSize + 1];

        return;

    }

    

    if ([newSuperview isKindOfClass:[UITextView class]]){

        UITextView* tv = (UITextView*)newSuperview;

        self.font = [UIFont fontWithName:tv.font.fontName size:tv.font.pointSize + 1];

        return ;

    }

    

    if (self) {

        if (self.tag == 10086) {

//            self.font = [UIFont systemFontOfSize:self.font.pointSize];

        } else {

            self.font = [UIFont fontWithName:self.font.fontName size:self.font.pointSize + 1];

        }

    }

}

加上这两句

if ([newSuperview isKindOfClass:[UITextField class]]){

        UITextField* tf = (UITextField*)newSuperview;

        self.font = [UIFont fontWithName:tf.font.fontName size:tf.font.pointSize + 1];

        return;

    }

    

    if ([newSuperview isKindOfClass:[UITextView class]]){

        UITextView* tv = (UITextView*)newSuperview;

        self.font = [UIFont fontWithName:tv.font.fontName size:tv.font.pointSize + 1];

        return ;

    }

的原因是因为 不断修改这两个视图的值字体会不断增大
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ios全局修改字体