محرر نصوص Swiftui بسيط وقوي لنظام iOS و MacOS مع تسليط الضوء على بناء الجملة المباشر.
قم بتمييز ما هو مهم كنوع المستخدمين.
يدعم iOS 13.0+ و MacOS 10.15+.
ملف -> حزم سويفت -> إضافة تبعية الحزمة واستخدم عنوان URL https://github.com/kyle-n/HighlightedTextEditor .
أضف pod 'HighlightedTextEditor' إلى Podfile و Run pod install .
يطبق AlmintingedTexteditor أنماطًا على أنماط Regex مطابقة النصوص التي تقدمها. يمكنك تطبيق أنماط متعددة على كل نمط 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
}
}
}
}لاحظ أن nsgularexpression يتم إنشاء مثيل له مرة واحدة . لا ينبغي إعادة إنشاءه في كل مرة يتم فيها إعادة رسم العرض. هذا يساعد الأداء.
لقد قمت بتضمين بعض الإعدادات المسبقة المفيدة لإبراز بناء الجملة على أنها اسكواش ثابتة على [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 | [Highlightrule] | الأنماط والتنسيق لتلك الأنماط |
.introspect(callback: (_ editor: HighlightedTextEditorInternals) -> Void) : يسمح لك للمطور بالوصول إلى كائنات Uikit أو AppKit المستخدمة بواسطة AmaxiledTexTeditor.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() مفيد لتخصيص سلوك المحرر بطريقة ما غير مدعومة من قبل API HLTE.
| ملكية | يكتب | وصف |
|---|---|---|
textView | uitextview أو nstextView | لتخصيص محرر نص UIKIT/APPKIT |
scrollView | NSSCROLLVIEW؟ | لتخصيص غلاف NSScrollView. يعود nil في Uikit |
| المعلمة | يكتب | وصف |
|---|---|---|
pattern | nsgularexpression | المحتوى الذي تريد تسليط الضوء عليه. يجب أن يتم إنشاء مثيله مرة واحدة للأداء. |
formattingRule | TextFormattingRule | النمط الذي يطبق على جميع النصوص المطابقة pattern |
formattingRules | [TextFormattingRule] | مجموعة من الأنماط التي تنطبق على جميع النصوص المطابقة pattern |
يوفر TextFormattingRule ثلاثة أجهزة تهيئة مختلفة قام بها كل نمط واحد. لتعيين أنماط متعددة ، استخدم TextFormattingRules متعددة.
| المعلمة | يكتب | وصف |
|---|---|---|
key | nsattributedString.Key | الأسلوب الذي يجب تعيينه (على سبيل المثال .foregroundColor ، .underlineStyle |
value | أي | النمط الفعلي UIColor.red NSColor.red key (على سبيل المثال key = .foregroundColor value |
| المعلمة | يكتب | وصف |
|---|---|---|
key | nsattributedString.Key | الأسلوب الذي يجب تعيينه (على سبيل المثال .foregroundColor ، .underlineStyle |
calculateValue | (سلسلة ، المدى <String.index>) -> أي | رد اتصال يحسب القيمة key . المعلمة الأولى هي محتوى النص الذي يتطابق معه Regex ، والثاني هو نطاق المباراة في السلسلة الكلية. |
تستخدم value واجهة برمجة تطبيقات أقدم غير معدلة ، لذا سيتعين عليك التحقق من الوثائق حول النوع الذي يمكن تمريره key معين.
| المعلمة | يكتب | وصف |
|---|---|---|
fontTraits | uifontdescriptor.symbolictraits أو nsfontdescriptor.symbolictraits | سمات تنسيق النص ( .bold سبيل [.traitBold] |
إذا كنت تستهدف iOS 14 / MACOS 11 ، فيمكنك استخدام مُهيئ الراحة للاستفادة من واجهات برمجة تطبيقات Swiftui الجديدة لتحويل الألوان إلى uicolors أو nscolors.
| المعلمة | يكتب | وصف |
|---|---|---|
foregroundColor | لون | لون النص |
fontTraits | uifontdescriptor.symbolictraits أو nsfontdescriptor.symbolictraits | سمات تنسيق النص ( .bold سبيل [.traitBold] |
Apple ، في حكمتها ، لم تمكن هذه الميزات لـ Xcode 12 GM. إذا كنت تستخدم Xcode Beta وترغب في تمكين هذا التهيئة ، فانتقل إلى Project_Name -> الأهداف -> منصة محددة -> إعدادات الإنشاء -> Swift Compiler -أعلام مخصصة وإضافة Flag -DBETA . <
هل تستخدم AightsideSexteditor في تطبيقك؟ أحب أن أظهر لك هنا! يرجى فتح طلب سحب يضيف رصاصة جديدة إلى القائمة أدناه باسم تطبيقك ورابط إلى صفحة TestFlight أو App Store الخاصة به.
رمز محرر النصوص Appkit استنادًا إلى MacEditorTextView بواسطة Thiago Holanda.
أنشأها كايل نازاريو.