web-dev-qa-db-ja.com

NSStringの一部を太字にする方法はありますか?

文字列の一部のみを太字にする方法はありますか?例えば:

おおよその距離:120m away

ありがとう!

72
Zhen

あなたがcouldすることは、 NSAttributedString を使用することです。

NSString *boldFontName = [[UIFont boldSystemFontOfSize:12] fontName];
NSString *yourString = ...;
NSRange boldedRange = NSMakeRange(22, 4);

NSMutableAttributedString *attrString = [[NSMutableAttributedString alloc] initWithString:yourString];

[attrString beginEditing];
[attrString addAttribute:kCTFontAttributeName 
                   value:boldFontName
                   range:boldedRange];

[attrString endEditing];
//draw attrString here...

この便利なダンディガイド を見て、NSAttributedStringオブジェクトをCore Textで描画してください。

96
Jacob Relkin

Jacobが述べたように、おそらくNSAttributedStringまたはNSMutableAttributedStringを使用したいでしょう。以下は、これを行う方法の一例です。

NSMutableAttributedString *string = [[NSMutableAttributedString alloc] initWithString:@"Approximate Distance: 120m away"];
NSRange selectedRange = NSMakeRange(22, 4); // 4 characters, starting at index 22

[string beginEditing];

[string addAttribute:NSFontAttributeName
           value:[NSFont fontWithName:@"Helvetica-Bold" size:12.0]
           range:selectedRange];

[string endEditing];
60
Chris Frederick

フォントに煩わされたくない場合(フォントのすべてのバリエーションに「太字」が含まれるわけではないため)、これを行う別の方法があります。現在、これはOS Xでのみ利用可能です...:

NSMutableAttributedString *attrString = [[NSMutableAttributedString alloc] initWithString:"Approximate Distance: 120m away"];
[attrString beginEditing];
[attrString applyFontTraits:NSBoldFontMask
                      range:NSMakeRange(22, 4)];
[attrString endEditing];
12
yura

上記のコードは、このattributedStringでUILabelを作成したときにクラッシュしました。

私はこのコードを使用しましたが、うまくいきました:

NSMutableAttributedString *attrString = [[NSMutableAttributedString alloc] initWithString:string];
NSRange boldedRange = NSMakeRange(0, 1);
UIFont *fontText = [UIFont systemFontOfSize:12]; //[UIFont fontWithName:@"Lato-Bold" size:12];
NSDictionary *dictBoldText = [NSDictionary dictionaryWithObjectsAndKeys:fontText, NSFontAttributeName, nil];
[attrString setAttributes:dictBoldText range:boldedRange];
6
Andrew Marin

スイフト

また、動的に塞ぐ文字列の範囲を取得することも含まれます

let nameString = "Magoo"
let string = "Hello my name is \(nameString)"

let attributes = [NSFontAttributeName:UIFont.systemFontOfSize(14.0),NSForegroundColorAttributeName: UIColor.black]
let boldAttribute = [NSFontAttributeName:UIFont.boldSystemFontOfSize(14.0)]

let attributedString = NSMutableAttributedString(string: string, attributes: attributes)

let nsString = NSString(string: string)
let range = nsString.rangeOfString(nameString)

if range.length > 0 { attributedString.setAttributes(boldAttribute, range: range) }

someLabel.attributedText = attributedString
4
Magoo

フォントをハードコーディングせずに文字列を太字にするには、負の値でStrokeWidth属性を使用できます。

let s = NSMutableAttributedString(string: "Approximate Distance: 120m away")
s.addAttribute(NSStrokeWidthAttributeName, value: NSNumber(value: -3.0), range: NSRange(22..<26))
4
Yonat

NSStringは単なるデータコンテナーです。プレゼンテーションの問題に関する詳細は含まれていません。

おそらくやりたいことは、文字列を表示するために使用されているUILabelの太字部分のようです。私はあなたができるとは思わない。ただし、UIを「近似距離:」、「120 m」、「不在」の3つのラベルにいつでも分割できます。 「。それらを互いにインラインに配置すると、目的の効果が得られます。

別のオプションとして、UIWebViewと少しのマークアップを使用して、文字列を埋め込み書式情報とともに表示することもできます。以下で説明します。

http://iphoneincubator.com/blog/windows-views/display-rich-text-using-a-uiwebview

3
aroth

Xamarin iosでは、NSStringの一部を次のように太字にすることができます。

public static NSMutableAttributedString BoldRangeOfString (string str, float fontSize, int startRange, int lengthRange)
    {
        var firstAttributes = new UIStringAttributes {
            Font = UIFont.BoldSystemFontOfSize(fontSize)
        };

        NSMutableAttributedString boldString = new NSMutableAttributedString (str);
        boldString.SetAttributes (firstAttributes.Dictionary, new NSRange (startRange, lengthRange));
        return boldString;
    }    

そして、このメソッドを呼び出します:

myLabel = new UILabel (); 
...
myLabel.AttributedText = BoldRangeOfString("my text", fontSize, startRange, lengthRange);    
2
Adi Rabi

@Jacob Relkinと@Andrew Marinの回答を結合しました。それ以外の場合、クラッシュしました。 iOS9の答えは次のとおりです。

UIFont *boldFont = [UIFont boldSystemFontOfSize:12];
NSString *yourString = @"Approximate Distance: 120m away";
NSRange boldedRange = NSMakeRange(22, 4);

NSMutableAttributedString *attrString = [[NSMutableAttributedString alloc] initWithString:yourString];

[attrString beginEditing];
[attrString addAttribute:NSFontAttributeName 
                   value:boldFont
                   range:boldedRange];

[attrString endEditing];

公式のドキュメントを見てみました: 1 および 2

2

フォントやサイズをハードコーディングしたくない場合は、次のコードを試して、文字列全体を太字にしてください。

NSMutableAttributedString *myString = [[NSMutableAttributedString alloc] initWithString:mainString];
[myString beginEditing];
[myString addAttribute:NSStrokeWidthAttributeName
                         value:[[NSNumber alloc] initWithInt: -3.f]
                         range:NSMakeRange(0, [mainString length])];
[myString endEditing];
0
oskarko