An enhanced version similar to TextEditor
, aimed at maintaining consistency in its usage across iOS and macOS platforms.
Welcome to download DevTutor, a cheat sheet app designed to help developers quickly build excellent applications using SwiftUI.
You can add MarkdownUI to an Xcode project by adding it as a package dependency.
- From the File menu, select Add Packages…
- Enter https://github.com/jaywcjlove/swiftui-texteditor the Search or Enter Package URL search field
- Link
Markdown
to your application target
Or add the following to Package.swift
:
.package(url: "https://github.com/jaywcjlove/swiftui-texteditor", from: "1.0.0")
import TextEditorPlus
struct ContentView: View {
@State var text = """
Hello World
"""
@State var isEditable = true
var body: some View {
TextEditorPlus(text: $text)
.textSetting(isEditable, for: .isEditable)
}
}
Set text weight and size:
TextEditorPlus(text: $text)
.font(.systemFont(ofSize: 24, weight: .regular))
Set editor padding:
TextEditorPlus(text: $text)
.textSetting(23, for: .insetPadding)
Set editor background color:
TextEditorPlus(text: $text)
.textSetting(NSColor.red, for: .backgroundColor)
Set editor text color:
TextEditorPlus(text: $text)
.textSetting(NSColor.red, for: .textColor)
Set editor placeholder string:
TextEditorPlus(text: $text)
//.font(NSFont(name: "pencontrol", size: 12)!)
.font(.systemFont(ofSize: CGFloat(Float(fontSize)!), weight: .regular))
.textSetting("Test placeholder string", for: .placeholderString)
Manipulate attributed strings with attributes such as visual styles, hyperlinks, or accessibility data for portions of the text.
TextEditorPlus(text: $text)
.textSetting(isEditable, for: .isEditable)
.textViewAttributedString(action: { val in
let style = NSMutableParagraphStyle()
style.lineSpacing = 5
style.lineHeightMultiple = 1.2
val.addAttribute(.paragraphStyle, value: style, range: NSRange(location: 0, length: val.length))
return val
})
You can now use TextEditorPlus
with NSMutableAttributedString
for more advanced text formatting:
import TextEditorPlus
struct ContentView: View {
@State var attributedText = NSMutableAttributedString(string: """
This is an example of NSMutableAttributedString.
You can apply rich text formatting directly!
""")
var body: some View {
VStack {
// Using NSMutableAttributedString binding
TextEditorPlus(text: $attributedText)
.textSetting(true, for: .isEditable)
.onAppear {
setupAttributedText()
}
Button("Add Formatting") {
applyFormatting()
}
}
}
func setupAttributedText() {
let fullRange = NSRange(location: 0, length: attributedText.length)
// Set base font
#if os(iOS)
attributedText.addAttribute(.font, value: UIFont.systemFont(ofSize: 16), range: fullRange)
#else
attributedText.addAttribute(.font, value: NSFont.systemFont(ofSize: 16), range: fullRange)
#endif
// Apply paragraph style
let paragraphStyle = NSMutableParagraphStyle()
paragraphStyle.lineSpacing = 3
paragraphStyle.paragraphSpacing = 8
attributedText.addAttribute(.paragraphStyle, value: paragraphStyle, range: fullRange)
}
func applyFormatting() {
let highlightText = "NSMutableAttributedString"
let range = (attributedText.string as NSString).range(of: highlightText)
if range.location != NSNotFound {
#if os(iOS)
attributedText.addAttribute(.backgroundColor, value: UIColor.systemBlue, range: range)
attributedText.addAttribute(.foregroundColor, value: UIColor.white, range: range)
#else
attributedText.addAttribute(.backgroundColor, value: NSColor.systemBlue, range: range)
attributedText.addAttribute(.foregroundColor, value: NSColor.white, range: range)
#endif
}
}
}
The TextEditorPlus
now supports both String
and NSMutableAttributedString
bindings:
TextEditorPlus(text: $text)
- forString
bindingTextEditorPlus(text: $attributedText)
- forNSMutableAttributedString
binding
When using NSMutableAttributedString
, the text view will preserve all formatting attributes and allow direct manipulation of the attributed string.
Licensed under the MIT License.