11

如何在UITextView. 我知道我需要创建一个 的子类UITextView,但是会发生什么drawRect:

谢谢。

4

14 回答 14

23

尝试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;

UITextView 上的苹果文档

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

属性文本:

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

@property(nonatomic,copy) NSAttributedString *attributedText

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

于 2012-10-28T21:56:15.497 回答
8

如果这是静态文本,您可以在 Interface Builder 中为它加下划线。确保首先通过在下拉菜单中选择“Attributed”来制作文本“Attributed”:

在此处输入图像描述

于 2014-07-29T20:24:44.973 回答
8

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

@{NSUnderlineStyleAttributeName: @(NSUnderlineStyleSingle)}
于 2014-04-24T02:05:20.657 回答
2
textViewMessage.linkTextAttributes = @{NSForegroundColorAttributeName: [UIColor blueColor], NSUnderlineStyleAttributeName: [NSNumber numberWithInt:NSUnderlineStyleSingle]};
于 2015-06-01T12:56:06.813 回答
1
-(IBAction)underline:(id)sender
{
    NSDictionary *underlineAttribute = @{NSUnderlineStyleAttributeName: @(NSUnderlineStyleSingle)};
    texts.attributedText = [[NSAttributedString alloc] initWithString:texts.text
                                                           attributes:underlineAttribute];
}
于 2014-09-30T10:54:42.230 回答
1

如果你想格式化你的文本(带下划线的词、链接、彩色词......)我建议你使用FTCoreText

于 2012-10-28T21:21:50.060 回答
1

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

    NSMutableAttributedString *attString = [[NSMutableAttributedString alloc] initWithString:@"Text"];
[attString addAttribute:NSUnderlineStyleAttributeName
                  value:@(NSUnderlineStyleSingle)
                  range:(NSRange){0,[attString length]}];
于 2017-06-02T12:40:26.653 回答
0

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

于 2012-11-26T07:25:07.347 回答
0

我建议您使用CoreText。基本教程在 raywenderlich 上

于 2012-10-29T09:13:19.093 回答
0

如果您使用的是 iOS 6,那么您可以使用UITextViewattributedText的属性。对文本应用下划线格式。如果您愿意,您还可以设置该属性以确保用户键入的文本具有一组特定的格式。typingAttributes

于 2012-10-28T21:03:03.237 回答
0
       let someString = NSMutableAttributedString(string: "Your String", attributes: [NSAttributedString.Key.font : UIFont.boldSystemFont(ofSize: 20), NSAttributedString.Key.underlineStyle : NSUnderlineStyle.single.rawValue])
        someStringTextView.attributedText = titleAT
       

你可以给你的字符串一堆属性,比如粗体、下划线等。

于 2022-02-04T16:45:44.230 回答
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
于 2019-12-02T17:17:59.280 回答
0

Swift 5. As my UITextView if for inserting text, I created an extension function as bellow.

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)
  }

}

The border is drawling the line and the style is adding the spacing between the lines. Usage in your UIView custom layout:

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

Image with the result

于 2020-03-06T23:30:11.547 回答
-3

要为文本添加下划线,您必须转到可以选择复制、剪切、删除选项的位置,现在有更多选项,例如 B/I/U(粗体、斜体、下划线)。选择此选项,就是这样。如果无法使用,请再次选择下划线选项。

于 2013-03-23T13:43:20.377 回答