19

ストーリーボードでは、さまざまなフォーマットオプションを使用して一連のラベルをレイアウトします。

それから私はします:

label.text = @"Set programmatically";

そして、すべてのフォーマットが失われます!これはiOS5で正常に機能します。

すべてのフォーマットを再コーディングせずに、テキスト文字列を更新する方法が必要ですか?!

label.attributedText.string 

読み取り専用です。

前もって感謝します。

4

3 に答える 3

29

次のコマンドを使用して、属性を辞書として抽出できます。

NSDictionary *attributes = [(NSAttributedString *)label.attributedText attributesAtIndex:0 effectiveRange:NULL];

次に、それらを新しいテキストで追加し直します。

label.attributedText = [[NSAttributedString alloc] initWithString:@"Some text" attributes:attributes];

これは、ラベルにテキストが含まれていることを前提としています。そうでない場合、クラッシュするため、最初に次のコマンドでチェックを実行する必要があります。

if ([self.label.attributedText length]) {...}
于 2013-06-17T00:37:26.093 に答える
4

attributedStringには、そのすべてのフォーマットデータが含まれています。ラベルはフォーマットについて何も知りません。

属性を別の辞書として保存し、attributedStringを変更するときに次を使用できる可能性があります。

[[NSAttributedString alloc] initWithString:@"" attributes:attributes range:range];

他の唯一のオプションは、属性を再度ビルドすることです。

于 2012-10-03T10:07:07.480 に答える
4

iOSプログラミングは初めてですが、同じ問題にすぐに遭遇しました。iOSでは、私の経験はそれです

  1. Lewis42の問題は一貫して発生します
  2. 属性を抽出して再適用するというjosefの提案は機能しません。null属性ディクショナリが返されます。

s / oを見回した後、この投稿に出くわし、その推奨事項に従って、最終的にこれを使用しました。

- (NSMutableAttributedString *)SetLabelAttributes:(NSString *)input col:(UIColor *)col size:(Size)size {

NSMutableAttributedString *labelAttributes = [[NSMutableAttributedString alloc] initWithString:input];

UIFont *font=[UIFont fontWithName:@"Helvetica Neue" size:size];

NSMutableParagraphStyle* style = [NSMutableParagraphStyle new];
style.alignment = NSTextAlignmentCenter;

[labelAttributes addAttribute:NSFontAttributeName value:font range:NSMakeRange(0, labelAttributes.length)];
[labelAttributes addAttribute:NSParagraphStyleAttributeName value:style range:NSMakeRange(0, labelAttributes.length)];
[labelAttributes addAttribute:NSForegroundColorAttributeName value:col range:NSMakeRange(0, labelAttributes.length)];

return labelAttributes;
于 2013-06-20T12:58:53.017 に答える