1

私のアプリでは、ラベルに下線テキストを表示する必要があるため、次のコードを使用して下線付きテキストを表示しました

NSMutableAttributedString *attributeString = [[NSMutableAttributedString alloc] initWithString:normalString];
    [attributeString addAttribute:NSUnderlineStyleAttributeName
                            value:[NSNumber numberWithInt:1]
                            range:(NSRange){0,[attributeString length]}];

wesiteAddressLabel.attributedText = attributeString;

このメソッドと、iOS 6.1 で正常に動作するその他の実装

しかし、iOS 5.1以下で実行すると、アプリがクラッシュしてしまい、

[attributeString addAttribute:NSUnderlineStyleAttributeName
                            value:[NSNumber numberWithInt:1]
                            range:(NSRange){0,[attributeString length]}];

以前のバージョンではサポートされていません

respondsToSelector:そのため、メソッドを使用してインスタンスが応答するかどうかを確認し、サポートされていないセレクターに対して別のメソッドを実装したいと考えています。

この方法をどのように使用しますか?

4

2 に答える 2

2

ドキュメントからのように:

attributedText ラベルによって表示されるスタイル付きテキスト。

@property(nonatomic,copy) NSAttributedString *attributedText 考察 このプロパティはデフォルトでは nil です。このプロパティに新しい値を割り当てると、テキスト プロパティの値も同じ文字列データに置き換えられますが、書式設定情報はありません。さらに、新しい値を割り当てると、font、textColor、およびその他のスタイル関連のプロパティの値が更新され、属性付き文字列の位置 0 から始まるスタイル情報が反映されます。

提供状況 iOS 6.0 以降で利用可能です。UILabel.h で宣言

特定のUIView要素が に応答できるかどうかを確認する必要がありattributedTextます。この場合:

[wesiteAddressLabel respondsToSelector:@selector(attributedText)];

十分なはずです

于 2013-07-18T08:16:14.063 に答える
1

以前のバージョンではUIImageView、各行のテキストの with と Height を取得して、テキストのすぐ下に描画する必要があります。

または、メソッドを使用してラベルのカテゴリを作成できますDrawRect

    - (void)drawRect:(CGRect)rect
 {
  CGContextRef ctx = UIGraphicsGetCurrentContext();
  CGContextSetRGBStrokeColor(ctx, 0.0f/255.0f, 0.0f/255.0f, 255.0f/255.0f, 1.0f); // Your underline color
  CGContextSetLineWidth(ctx, 1.0f);

  UIFont *font = [UIFont systemFontOfSize:16.0f];
  CGSize constraintSize = CGSizeMake(MAXFLOAT, MAXFLOAT);
  CGSize labelSize;
  labelSize = [self.text sizeWithFont:font constrainedToSize:constraintSize lineBreakMode:UILineBreakModeWordWrap];  

  CGContextMoveToPoint(ctx, 0, self.bounds.size.height - 1);
  CGContextAddLineToPoint(ctx, labelSize.width + 10, self.bounds.size.height - 1);

  CGContextStrokePath(ctx);

  [super drawRect:rect];  
}
于 2013-07-18T08:17:24.927 に答える