2015-09-20 3 views
1

В одном из моих приложений у меня есть документ, стили с методами для различных стилей текста, например:Доступ к «Текстовые стили» в Interface Builder и/или раскадровка

+(UIFont*)h1{ 
    return [UIFont fontWithName:@"Helvetica" size:48.0]; 
} 

Затем в viewDidLoad методах каждого мои контроллеры представлений, я программировал стили текста. Это был отличный способ сохранить стили в приложении постоянными и легкими для настройки.

Вот мой вопрос: есть ли способ, чтобы XIB-файлы/раскадровки отражали эти стили текста? Если нет, есть ли способ реализовать аналогичную функциональность (т. Е. Иметь все стили, определенные в одном месте, и отбирать элементы XIB/Storyboard оттуда)? Спасибо за прочтение.

EDIT:

Чтобы уточнить, вот желаемый конечный результат:

  1. Определить некоторые постоянные текстовые стили, такие как h1, h2, р где-то в проекте. Каждый стиль текста имеет свой собственный шрифт, размер шрифта, цвет и т. Д.
  2. Можете установить стиль UILabels в различных вариантах текста в любом из этих стилей текста. Это можно сделать в коде, в Interface Builder (например, в User Defined Runtime Attributes, как предлагалось Luan) или где угодно.
  3. Уметь видеть стили, применяемые к каждому UILabel в интерфейсе Builder/Storyboard , без необходимости запускать приложение каждый раз.

ответ

8

ОК, так что получается, что это можно сделать! Вот как:

  1. Добавьте класс стилей, где вы можете поместить всю вашу информацию о стиле в одном месте:

    import UIKit 
    
    class MyStyles: NSObject { 
        static func fontForStyle(style:String)->UIFont{ 
        switch style{ 
        case "p": 
         return UIFont.systemFontOfSize(18); 
        case "h1": 
         return UIFont.boldSystemFontOfSize(36); 
        case "h2": 
         return UIFont.boldSystemFontOfSize(24); 
        default: 
         return MyStyle.fontForStyle("p"); 
        } 
        } 
    } 
    
  2. Сделайте подкласс любых объектов, которые вы хотели бы реализовать стили, говорят UILabel, и введите следующий код:

    import UIKit 
    
    @IBDesignable class MyLabel: UILabel { 
        @IBInspectable var style:String="p"{ 
        didSet{self.font=MyStyle.fontForStyle(style)} 
        } 
    } 
    
  3. Добавить UILabel на ваш взгляд, в Interface Builder и установить его класс MyLabel. Затем в Инспекторе атрибутов вы увидите поле стиля, в котором вы можете ввести h1, h2 или что-то еще, и шрифт ярлыка сразу обновится. Хотите изменить все ваши метки h1 на размер 48? Просто обновите MyStyles, и вы сразу увидите изменения в своих XIBs/Storyboards.

Это будет огромная экономия времени, я надеюсь, что некоторые из вас сочтут это полезным!

+0

никогда не думал об этом ... блестящий –

2

Я действительно не понимаю. Но вы хотите установить пользовательский «текстовый стиль» из Interface Builder, вы можете это сделать. для UILable

1, Создать категорию UILabel + MyCustomStyle.

в UILabel + MyCustomStyle.h

#import <UIKit/UIKit.h> 

@interface UILabel (MyCustomStyle) 

@property (nonatomic, copy) NSString *mTextStyle; 

@end 

в UILabel + MyCustomStyle.m

#import "UILabel+MyCustomStyle.h" 

@implementation UILabel (MyCustomStyle) 

-(NSString *)mTextStyle { 
    return self.text; 
} 

-(void)setMTextStyle:(NSString *)txt{ 

     if ([txt isEqualToString:@"h1"]) { 

     // custom style h1 code 
     self.font = ...; 
    }else if ([txt isEqualToString:@"h2"]){ 

     // custom style h2 code 
     self.font = ...; 
    } 
    //... more custom style 
} 

2, Назначение стиль текста в IB

enter image description here

+0

Это потрясающе, спасибо! Но есть ли способ увидеть пользовательские стили непосредственно в окне IB/Storyboard или в окне предварительного просмотра (т. Е. Без запуска приложения при каждом изменении)? – Rogare

Смежные вопросы