ตัวแก้ไขข้อความ Swiftui ที่เรียบง่ายและทรงพลังสำหรับ iOS และ MacOS พร้อมไฮไลต์ไวยากรณ์สด
เน้นสิ่งที่สำคัญเมื่อผู้ใช้ของคุณพิมพ์
รองรับ iOS 13.0+ และ MacOS 10.15+
ไฟล์ -> แพ็คเกจ Swift -> เพิ่มการพึ่งพาแพ็คเกจและใช้ URL https://github.com/kyle-n/HighlightedTextEditor
เพิ่ม pod 'HighlightedTextEditor' ลงใน Podfile ของคุณและ Run pod install
HighlightEdTextEditor ใช้สไตล์กับรูปแบบการจับคู่ข้อความที่คุณมีให้ คุณสามารถใช้หลายรูปแบบกับแต่ละรูปแบบ regex ดังที่แสดงในตัวอย่างด้านล่าง
import HighlightedTextEditor
// matches text between underscores
let betweenUnderscores = try ! NSRegularExpression ( pattern : " _[^_]+_ " , options : [ ] )
struct ContentView : View {
@ State private var text : String = " "
private let rules : [ HighlightRule ] = [
HighlightRule ( pattern : betweenUnderscores , formattingRules : [
TextFormattingRule ( fontTraits : [ . traitItalic , . traitBold ] ) ,
TextFormattingRule ( key : . foregroundColor , value : UIColor . red ) ,
TextFormattingRule ( key : . underlineStyle ) { content , range in
if content . count > 10 { return NSUnderlineStyle . double . rawValue }
else { return NSUnderlineStyle . single . rawValue }
}
] )
]
var body : some View {
VStack {
HighlightedTextEditor ( text : $text , highlightRules : rules )
// optional modifiers
. onCommit { print ( " commited " ) }
. onEditingChanged { print ( " editing changed " ) }
. onTextChange { print ( " latest text value " , $0 ) }
. onSelectionChange { ( range : NSRange ) in
print ( range )
}
. introspect { editor in
// access underlying UITextView or NSTextView
editor . textView . backgroundColor = . green
}
}
}
}สังเกตว่า NSREGULAREXPRESSTION ถูกสร้างอินสแตนซ์ หนึ่งครั้ง ไม่ควรสร้างใหม่ทุกครั้งที่มีการวาดใหม่ สิ่งนี้ช่วยให้ประสิทธิภาพ
ฉันได้รวมค่าที่ตั้งไว้ล่วงหน้าที่มีประโยชน์สองสามอย่างสำหรับการไฮไลต์ไวยากรณ์เป็น vars คงที่บน [HighlightRule] หากคุณมีแนวคิดสำหรับการตั้งค่าล่วงหน้าที่เป็นประโยชน์อื่น ๆ โปรดอย่าลังเลที่จะเปิดคำขอดึงด้วยรหัสที่ตั้งไว้ล่วงหน้าของคุณ
ค่าที่ตั้งไว้ล่วงหน้าในปัจจุบันรวมถึง:
markdownurlตัวอย่างของการใช้ที่ตั้งไว้ล่วงหน้า:
HighlightedTextEditor ( text : $text , highlightRules : . markdown ) ฉันยังเพิ่มตัวแปรที่ตั้งไว้ล่วงหน้า NSRegularExpression.all สำหรับการเลือกสตริงทั้งหมดได้อย่างง่ายดาย
ตัวอย่างของการใช้มัน:
HighlightedTextEditor ( text : $text , highlightRules : [
HighlightRule ( pattern : . all , formattingRule : TextFormattingRule ( key : . underlineStyle , value : NSUnderlineStyle . single . rawValue ) )
] ) | พารามิเตอร์ | พิมพ์ | คำอธิบาย |
|---|---|---|
text | การผูก <String> | เนื้อหาข้อความของฟิลด์ |
highlightRules | [Highlighttrule] | รูปแบบและการจัดรูปแบบสำหรับรูปแบบเหล่านั้น |
.introspect(callback: (_ editor: HighlightedTextEditorInternals) -> Void) : ช่วยให้คุณนักพัฒนาสามารถเข้าถึงวัตถุ UIKIT หรือ AppKit ที่ใช้โดย HighlightEstEditorator.onCommit(_ callback: @escaping () -> Void) : เรียกว่าเมื่อผู้ใช้หยุดการแก้ไข.onEditingChanged(_ callback: @escaping () -> Void) : เรียกเมื่อผู้ใช้เริ่มแก้ไข.onTextChange(_ callback: @escaping (_ editorContent: String) -> Void) : เรียกว่าเมื่อใดก็ตามที่ text เปลี่ยนไป.onSelectionChange(_ callback: @escaping (_ selectedRange: NSRange) -> Void).onSelectionChange(_ callback: @escaping (_ selectedRanges: [NSRange]) -> Void) (AppKit เท่านั้น) ส่งผ่านเป็นพารามิเตอร์ไปยัง .introspect() การเรียกกลับ มีประโยชน์สำหรับการปรับแต่งพฤติกรรมตัวแก้ไขในทางใดทางหนึ่งที่ไม่ได้รับการสนับสนุนโดย HLTE API
| คุณสมบัติ | พิมพ์ | คำอธิบาย |
|---|---|---|
textView | uitextview หรือ nstextView | สำหรับการปรับแต่งตัวแก้ไขข้อความ UIKIT/APPKIT |
scrollView | nsscrollview? | สำหรับการปรับแต่ง wrapper NSSCrollView ส่งคืน nil ใน Uikit |
| พารามิเตอร์ | พิมพ์ | คำอธิบาย |
|---|---|---|
pattern | nsregularexpression | เนื้อหาที่คุณต้องการเน้น ควรได้รับการสร้างอินสแตนซ์ หนึ่งครั้ง เพื่อประสิทธิภาพ |
formattingRule | TextFormattingRule | สไตล์การใช้กับข้อความทั้งหมดที่ตรงกับ pattern |
formattingRules | [TextFormattingRule] | อาร์เรย์ของสไตล์ที่ใช้กับข้อความทั้งหมดที่ตรงกับ pattern |
TextFormattingRule นำเสนอเครื่องเริ่มต้นที่แตกต่างกันสามชุดซึ่งแต่ละชุดหนึ่งสไตล์ ในการตั้งค่าหลายสไตล์ให้ใช้ TextFormattingRules หลายตัว
| พารามิเตอร์ | พิมพ์ | คำอธิบาย |
|---|---|---|
key | nsattributedString.key | สไตล์ที่จะตั้งค่า (เช่น .foregroundColor , .underlineStyle ) |
value | ใดๆ | สไตล์จริงที่ใช้กับ key (ex for key = .foregroundColor value คือ UIColor.red หรือ NSColor.red ) |
| พารามิเตอร์ | พิมพ์ | คำอธิบาย |
|---|---|---|
key | nsattributedString.key | สไตล์ที่จะตั้งค่า (เช่น .foregroundColor , .underlineStyle ) |
calculateValue | (สตริงช่วง <string.index>) -> ใด ๆ | การโทรกลับที่คำนวณค่าสำหรับ key พารามิเตอร์แรกคือเนื้อหาข้อความที่ตรงกับ regex ที่สองคือช่วงการจับคู่ในสตริงโดยรวม |
value ใช้ API ที่เก่ากว่าและไม่ได้พิมพ์ดังนั้นคุณจะต้องตรวจสอบเอกสารสำหรับประเภทที่สามารถส่งผ่านสำหรับ key ที่กำหนด
| พารามิเตอร์ | พิมพ์ | คำอธิบาย |
|---|---|---|
fontTraits | uifontdescriptor.symbolictraits หรือ nsfontdescriptor.symbolictraits | แอตทริบิวต์การจัดรูปแบบข้อความ (เช่น [.traitBold] ใน UIKIT และ .bold ใน AppKit) |
หากคุณกำลังกำหนดเป้าหมาย iOS 14 / MacOS 11 คุณสามารถใช้การเริ่มต้นความสะดวกสบายโดยใช้ประโยชน์จาก Swiftui API ใหม่สำหรับการแปลงสีเป็น UIColors หรือ Nscolors
| พารามิเตอร์ | พิมพ์ | คำอธิบาย |
|---|---|---|
foregroundColor | สี | สีของข้อความ |
fontTraits | uifontdescriptor.symbolictraits หรือ nsfontdescriptor.symbolictraits | แอตทริบิวต์การจัดรูปแบบข้อความ (เช่น [.traitBold] ใน UIKIT และ .bold ใน AppKit) |
Apple ในภูมิปัญญาของมันไม่ได้เปิดใช้งานคุณสมบัติเหล่านี้สำหรับ XCode 12 GM หากคุณใช้ XCode Beta และต้องการเปิดใช้งานการเริ่มต้นนี้ให้ไปที่ Project_name -> เป้าหมาย -> แพลตฟอร์มที่ระบุ -> การตั้งค่าการสร้าง -> Swift Compiler -Flag ที่กำหนดเองและเพิ่ม Flag -DBETA -
คุณใช้ไฮไลต์เทสต์ Editor ในแอปของคุณหรือไม่? ฉันชอบที่จะแสดงคุณที่นี่! โปรดเปิดคำขอดึงที่เพิ่มกระสุนใหม่ลงในรายการด้านล่างด้วยชื่อแอปของคุณและลิงก์ไปยังหน้าทดสอบหรือหน้า App Store
รหัสตัวแก้ไขข้อความ AppKit ตาม MaceditortextView โดย Thiago Holanda
สร้างโดย Kyle Nazario