2012-12-10 84 views
2

我有一個大的應用程序,需要更改字體,但我不想觸摸每個標籤,文本字段等。如何訪問IB中使用的「systemFont」和[UIFont systemFontOfSize:x]更改控件使用的默認系統字體

我已經試過這一個:iOS 5: Curious about UIAppearance但這不是解決方案,因爲我有不同的FontSizes和Bold/Regular在我的應用程序,我不能設置它的整體。

我可以通過UIApplication或InfoPlist中的某個地方設置它嗎?

+0

這將是很好,如果有一個簡單的方法來做到這一點.. –

+0

如果這是一個一次性的事情,你只是想用不同於使用IB在應用程序界面中使用的字體,您可以嘗試手動編輯XIB,因爲它是XML ...如果您的界面在代碼中並且您想要改變「systemFontOfSize:」*的行爲*,那麼也許你可以看看方法swizzling ...我從來沒有嘗試過,但可能會有副作用... – Guillaume

+0

不幸的是,它不是一次性的事情。 – xapslock

回答

5

您可以爲UILabel,UITextField和UIButton創建類別,並且可以在「awakeFromNib」方法中將字體名稱更改爲新字體,並且可以保持相同大小。我在下面添加了UILabel類別的代碼。您可以對UITextField和UIButton執行相同的操作。

@implementation UILabel (CustomFontLabel) 

-(void)awakeFromNib{ 
    [super awakeFromNib]; 
    float size = [self.font pointSize]; 
    NSString *stringfontstyle=self.font.fontName; 
    if([stringfontstyle rangeOfString:@"Bold"].location != NSNotFound) { 
     self.font = [UIFont fontWithName:@"MyCustomFont-Bold" size:size]; 
    } 
    else if ([stringfontstyle rangeOfString:@"Italic"].location != NSNotFound) { 
     self.font = [UIFont fontWithName:@"MyCustomFont-Italic" size:size]; 
    } 
    else if ([stringfontstyle rangeOfString:@"Medium"].location != NSNotFound) { 
     self.font = [UIFont fontWithName:@"MyCustomFont-Medium" size:size]; 
    } 
    else { 
     self.font = [UIFont fontWithName:@"MyCustomFont" size:size]; 
    } 
} 

@end 
+0

這是一個很好的。你知道一個簡單的方法來檢查它是否大膽?或者是檢查「-bold」的字體名稱的唯一方法? – xapslock

+0

我更新了我的答案,請檢查。 –

+0

非常感謝! – xapslock