Я использую IB_DESIGNABLE в подклассе UIView, потому что я хочу, чтобы можно было сделать атрибутированную строку программным путем, но она появилась в построителе интерфейса (чтобы сохранить меня от необходимости запуска приложения, чтобы увидеть форматирование)IB_DESIGNABLE с использованием атрибутированных строк
Я сказал, что я могу поместить свой код в
- (void)prepareForInterfaceBuilder;
И это работает до определенной степени. он появляется в построителе интерфейса. Но когда я иду запускать APP, форматирование теряется. Он по-прежнему отображается в построителе интерфейса, но не в приложении.
Ниже приведены методы, которые я попытался использовать для создания моей атрибутивной строки, но они не отображаются в построителе интерфейса и при запуске приложения.
- (instancetype)initWithFrame:(CGRect)frame;
- (void)drawRect:(CGRect)frame;
Однако, с учетом сказанного, я нашел метод, который будет отображаться в APP, но не в построителе интерфейса.
- (instancetype)initWithCoder:(NSCoder *)aDecoder;
С учетом сказанного, решение было бы просто использовать методы BOTH. Однако мне было интересно, есть ли другой метод, который бы взял лучшее из обоих миров.
Кроме того, я добавлю фрагмент кода, чтобы показать, что я делаю, и предложить некоторое завершение этого запроса.
IB_DESIGNABLE
@interface FooLabel1 : UILabel
@property (nonatomic, copy) IBInspectable NSAttributedString *attributedText;
@end
@implementation FooLabel1
- (instancetype)initWithCoder:(NSCoder *)aDecoder {
if (self = [super initWithCoder:aDecoder]) {
[self localizeattributedString];
}
return self;
}
- (void)localizeattributedString {
NSMutableAttributedString *mat = [[NSMutableAttributedString alloc] initWithString:NSLocalizedString(
@"Hello"
@"Darkness my old friend"
, nil) attributes:@{
NSForegroundColorAttributeName : [UIColor orangeColor],
}];
[mat appendAttributedString:[[NSAttributedString alloc] initWithString:NSLocalizedString(@"world!", nil) attributes:@{
NSFontAttributeName : [UIFont boldSystemFontOfSize:60],
NSForegroundColorAttributeName : [UIColor blueColor]
}]];
self.attributedText = [mat autorelease];
}
- (void)prepareForInterfaceBuilder {
[self localizeattributedString];
}
@end