UITextView中的下划线文本

时间:2012-10-28 20:58:50

标签: iphone objective-c ios xcode uitextview

如何在UITextView中为文字加下划线。我理解我需要创建一个UITextView的子类,但drawRect:下的内容是什么?

感谢。

13 个答案:

答案 0 :(得分:22)

尝试使用NSAttributedString,如下所示,并在UITextView中设置。这适用于iOS6。

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

有关NSAttributedString的详细信息,请查看此How do you use NSAttributedString?

例如: -

textView.attributedText = attString;

来自apple documentation on UITextView

  

在iOS 6及更高版本中,此类支持多种文本样式   使用attributedText属性。 (不支持样式文本   早期版本的iOS。)为此属性设置值会导致   文本视图使用属性中提供的样式信息   串。您仍然可以使用font,textColor和textAlignment   用于设置样式属性的属性,但这些属性适用于所有属性   文本视图中的文本。

attributedText:

文本视图显示的样式文本。

@property(nonatomic,copy) NSAttributedString *attributedText

讨论:默认情况下,此属性为零。为此属性分配新值也会使用相同的字符串数据替换text属性的值,尽管没有任何格式信息。此外,分配新的值会更新font,textColor和textAlignment属性中的值,以便它们反映从属性字符串中的位置0开始的样式信息。

答案 1 :(得分:8)

如果您想避免包含CoreText,可以使用具有以下属性的属性字符串:

@{NSUnderlineStyleAttributeName: @(NSUnderlineStyleSingle)}

答案 2 :(得分:6)

如果这是静态文本,您可以在Interface Builder中为其加下划线。请务必制作文字'归因于'首先选择'归因于'在下拉菜单中:

enter image description here

答案 3 :(得分:2)

textViewMessage.linkTextAttributes = @{NSForegroundColorAttributeName: [UIColor blueColor], NSUnderlineStyleAttributeName: [NSNumber numberWithInt:NSUnderlineStyleSingle]};

答案 4 :(得分:1)

如果您要格式化文字(带下划线的字词,链接,彩色字词......),我建议您使用FTCoreText

答案 5 :(得分:1)

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

答案 6 :(得分:0)

如果您使用的是iOS 6,则可以使用 UITextView attributedText属性。对文本应用下划线格式。您还可以设置typingAttributes属性,以确保用户键入的文本具有特定的格式设置(如果您愿意)。

答案 7 :(得分:0)

我建议您使用CoreText。基础教程是here on raywenderlich

答案 8 :(得分:0)

我建议您使用MFUnderlinedTextView,这会有所帮助。

答案 9 :(得分:0)

您不能使用“kCTUnderlineStyleAttributeName”或“kCTUnderlineStyleSingle” 现在你必须这样做:

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

答案 10 :(得分:0)

这就是我使用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

答案 11 :(得分:0)

迅速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()
  }

Image with the result

答案 12 :(得分:-3)

要为文字加下划线,您必须去哪里可以选择复制,剪切,删除选项,现在有更多选项,如B / I / U(粗体,斜体,下划线)。选择此选项就是这样。并且无法使用它,请再次选择下划线选项。