属性付きの文字列をプログラムで作成できるようにしたいので、UIView サブクラスで IB_DESIGNABLE を使用していますが、それを Interface builder に表示します (フォーマットを確認するためにアプリを実行する必要がなくなります)。
コードを入れることができると言われました
- (void)prepareForInterfaceBuilder;
そして、それはある程度機能します。インターフェイスビルダーに表示されます。しかし、APP を実行すると、フォーマットが失われます。インターフェイスビルダーには引き続き表示されますが、アプリには表示されません。
以下は、属性付き文字列を作成するために使用しようとしたメソッドですが、インターフェイス ビルダーにもアプリの実行時にも表示されません。
- (instancetype)initWithFrame:(CGRect)frame;
- (void)drawRect:(CGRect)frame;
ただし、そうは言っても、アプリではレンダリングされますが、インターフェイスビルダーではレンダリングされないメソッドが見つかりました。
- (instancetype)initWithCoder:(NSCoder *)aDecoder;
そうは言っても、解決策は両方の方法を使用することです。しかし、両方の長所を活かす別の方法があるのではないかと考えていました。
また、コード スニペットを追加して、実行していることを示し、このクエリを補完します。
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