Ios 使用AttributedString立即格式化UITextView

Ios 使用AttributedString立即格式化UITextView,ios,swift,macos,textview,uitextview,Ios,Swift,Macos,Textview,Uitextview,我正在开发一个macOS富文本编辑器,它为文本视图的每一行应用预定义的样式 要格式化行,我使用NSAttributedString,然后将该字符串插入我的UITextView。为了让事情变得更简单,我使用了一个叫做的工具 我的代码如下所示。这是直截了当的,效果很好 import Cocoa import SwiftRichString import AppKit class ViewController: NSViewController { @IBOutlet var textVie

我正在开发一个macOS富文本编辑器,它为文本视图的每一行应用预定义的样式

要格式化行,我使用
NSAttributedString
,然后将该字符串插入我的
UITextView
。为了让事情变得更简单,我使用了一个叫做的工具

我的代码如下所示。这是直截了当的,效果很好

import Cocoa
import SwiftRichString
import AppKit

class ViewController: NSViewController {
    @IBOutlet var textView: NSTextView!
    
    override func viewDidLoad() {
        super.viewDidLoad()

        // Format the string
        let style = Style {
            $0.font = NSFont(name: "Arial", size: 20)
            $0.color = NSColor.black
            $0.alignment = .center
        }
        let attributedText = "Hello World!".set(style: style)

        // Add formatted string to the text view
        textView.textStorage?.append(attributedText)
    }

    override var representedObject: Any? {
        didSet {
        // Update the view, if already loaded.
        }
    }

}
当前情况:

用户正在键入格式化的行。然后,当用户点击Return并键入某些内容时,新行的格式将返回到UITextView的默认样式

我想要什么:

用户键入某一格式化行,然后点击回车键。下一行在移动中格式化为另一种预定义样式

示例:

  • 用户正在键入标题行。当前样式为(Arial,粗体,20磅)
  • 他击中了回击
  • 下一行应使用预定义的样式(Arial,12pt)设置为普通文本样式
  • 重要提示:


    在我上面的代码中,我能够轻松地格式化行,因为它是硬编码的。我真正的问题是,如何立即格式化下一行,因为下一行将由用户输入。在用户开始编写前,应将样式应用于下一行。

    也许您可以使用
    可选的func textviewdichange(\utextview:UITextView)


    更改后,只需解析文本,找到新行,拆分它们并应用所有您想要的样式

    也许您可以使用
    可选的func textView didchange(utextview:UITextView)


    更改后,只需解析文本,找到新行,拆分它们并应用所有您想要的样式即可

    好的,我刚刚想出了如何使用
    键入属性
    来解决这个问题(感谢@Larme的提示)


    很简单

    好的,我刚刚学会了如何使用
    键入属性
    来解决这个问题(感谢@Larme的提示)


    很简单

    请原谅我离题了。如果你正在制作一个文本编辑器,你可以考虑使用一个表格视图,其中每一个文本行都是一个单元格,这对于程序员来说是额外的工作,但是它会显著地提高性能。这就是Xcode编辑器的构建方式。

    请原谅,这是个离题。如果你正在制作一个文本编辑器,你可以考虑使用一个表格视图,其中每一个文本行都是一个单元格,这对于程序员来说是额外的工作,但是它会显著地提高性能。这就是Xcode编辑器的构建方式。

    可能会设置
    键入属性
    :?请详细说明?可能会设置
    键入属性
    :?请详细说明?
    textViewDidChange
    (对于macOS而言,
    textDidChange
    )在这里没什么作用,因为我需要在用户开始键入下一行之前应用新样式。
    textViewDidChange
    (对于macOS而言,
    textDidChange
    )在这里做不了什么,因为我需要在用户开始键入下一行之前应用新样式。
       // Define next attributes
       let attributes: [NSAttributedString.Key: Any] = [
           .foregroundColor: NSColor.red,
           .font: NSFont(name: "Arial", size: 12)!,
       ]
       
       // Assign attributes to the text view typing attributes
       textView.typingAttributes = attributes