Ios 使用AttributedString立即格式化UITextView
我正在开发一个macOS富文本编辑器,它为文本视图的每一行应用预定义的样式 要格式化行,我使用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
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的默认样式
我想要什么:
用户键入某一格式化行,然后点击回车键。下一行应在移动中格式化为另一种预定义样式
示例:
在我上面的代码中,我能够轻松地格式化行,因为它是硬编码的。我真正的问题是,如何立即格式化下一行,因为下一行将由用户输入。在用户开始编写前,应将样式应用于下一行。也许您可以使用
可选的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