web-dev-qa-db-ja.com

UITextViewのテキストに下線を引く

UITextViewのテキストに下線を引くにはどうすればよいですか。 UITextViewのサブクラスを作成する必要があることは理解していますが、drawRect:の下には何が入りますか?

ありがとう。

11
James Anderson

次のようにNSAttributedStringを使用して、UITextViewに設定してみてください。これはiOS6で機能します。

NSMutableAttributedString *attString = [[NSMutableAttributedString alloc] initWithString:@"Some String"];
[attString addAttribute:(NSString*)kCTUnderlineStyleAttributeName 
                   value:[NSNumber numberWithInt:kCTUnderlineStyleSingle] 
                   range:(NSRange){0,[attString length]}];

NSAttributedStringの詳細については、これを確認してください NSAttributedStringをどのように使用しますか?

例:-

textView.attributedText = attString;

から ITextViewに関するAppleのドキュメント

IOS 6以降では、このクラスはattributedTextプロパティを使用して複数のテキストスタイルをサポートします。 (スタイル付きテキストは、以前のバージョンのiOSではサポートされていません。)このプロパティに値を設定すると、テキストビューは属性付き文字列で提供されるスタイル情報を使用します。 font、textColor、およびtextAlignmentプロパティを使用してスタイル属性を設定することはできますが、これらのプロパティはテキストビューのすべてのテキストに適用されます。

attributedText:

テキストビューによって表示されるスタイル付きテキスト。

@property(nonatomic,copy) NSAttributedString *attributedText

ディスカッション:このプロパティはデフォルトではnilです。このプロパティに新しい値を割り当てると、フォーマット情報はありませんが、textプロパティの値も同じ文字列データに置き換えられます。さらに、新しい値を割り当てると、font、textColor、およびtextAlignmentプロパティの値が更新され、属性付き文字列の位置0から始まるスタイル情報が反映されます。

23
iDev

CoreTextを含める必要がない場合は、次の属性を持つ属性付き文字列を利用できます。

@{NSUnderlineStyleAttributeName: @(NSUnderlineStyleSingle)}
8
Ray Fix

これが静的テキストの場合は、InterfaceBuilderで下線を引くことができます。ドロップダウンメニューで[属性付き]を選択して、最初に[属性付き]というテキストを作成してください。

enter image description here

7
Adam Johns
textViewMessage.linkTextAttributes = @{NSForegroundColorAttributeName: [UIColor blueColor], NSUnderlineStyleAttributeName: [NSNumber numberWithInt:NSUnderlineStyleSingle]};
2
jose920405

「kCTUnderlineStyleAttributeName」または「kCTUnderlineStyleSingle」は使用できません。次のようにする必要があります。

    NSMutableAttributedString *attString = [[NSMutableAttributedString alloc] initWithString:@"Text"];
[attString addAttribute:NSUnderlineStyleAttributeName
                  value:@(NSUnderlineStyleSingle)
                  range:(NSRange){0,[attString length]}];
1
Tayo119

テキストをフォーマットしたい場合(下線付きの単語、リンク、色付きの単語など) FTCoreText を使用することをお勧めします

1
Solidus
-(IBAction)underline:(id)sender
{
    NSDictionary *underlineAttribute = @{NSUnderlineStyleAttributeName: @(NSUnderlineStyleSingle)};
    texts.attributedText = [[NSAttributedString alloc] initWithString:texts.text
                                                           attributes:underlineAttribute];
}
1
user3651677

MFUnderlinedTextView を使用することをお勧めします。役に立ちます。

0
yebw

これは私がSwift 5:

let attributedString = NSMutableAttributedString(string: myTextView.text ?? "")
myTextView.linkTextAttributes = [NSAttributedString.Key(rawValue: NSAttributedString.Key.underlineStyle.rawValue): NSUnderlineStyle.single.rawValue] as [NSAttributedString.Key: Any]?
myTextView.attributedText = attributedString
0
jaytrixz

IOS 6を使用している場合は、ITextViewattributedText属性を使用できます。テキストに下線の書式を適用します。必要に応じて、typingAttributesプロパティを設定して、ユーザーが入力するテキストに特定の書式設定が含まれるようにすることもできます。

0
rmaddy

CoreText を使用することをお勧めします。基本的なチュートリアルは ここではraywenderlich です。

0
Mathew Varghese

Swift 5. UITextViewとして、テキストを挿入する場合は、次のように拡張関数を作成しました。

extension UITextView {

  func underlined() {
    let border = CALayer()
    let width = CGFloat(1.0)
    border.borderColor = UIColor.lightGray.cgColor
    border.frame = CGRect(x: 0, y: self.frame.size.height - 5, width:  self.frame.size.width, height: 1)
    border.borderWidth = width
    self.layer.addSublayer(border)
    self.layer.masksToBounds = true
    let style = NSMutableParagraphStyle()
    style.lineSpacing = 15
    let attributes = [NSAttributedString.Key.paragraphStyle : style, NSAttributedString.Key.foregroundColor : UIColor.darkGray, NSAttributedString.Key.font :  UIFont.systemFont(ofSize: 13)]
    self.attributedText = NSAttributedString(string: self.text, attributes: attributes)
  }

}

境界線は線を引き、スタイルは線の間に間隔を追加しています。 UIViewカスタムレイアウトでの使用法:

override func layoutSubviews() {
    super.layoutSubviews()
    self.dateAndTimeInput.underlined()
  }

結果のある画像

0