Explorar o código

update menu action textview

alqindiirsyam %!s(int64=2) %!d(string=hai) anos
pai
achega
60cb30955e

+ 27 - 4
appbuilder-ios/DigiXLite/DigiXLite/Source/View/Chat/CustomTextView.swift

@@ -21,32 +21,55 @@ class CustomTextView: UITextView {
     
     @objc func toggleStrikethrough(_ sender: Any?) {
         if let range = self.selectedTextRange {
-            self.replace(self.textRange(from: range.start, to: range.end)!, withText: "~\(self.text(in: range)!)~")
+            let startPosition = self.offset(from: self.beginningOfDocument, to: range.start)
+            if startPosition == 0 || checkCharBefore(char: self.text.substring(from: startPosition - 1, to: startPosition - 1)) {
+                self.replace(self.textRange(from: range.start, to: range.end)!, withText: "~\(self.text(in: range)!)~")
+            } else {
+                self.replace(self.textRange(from: range.start, to: range.end)!, withText: " ~\(self.text(in: range)!)~")
+            }
             UIMenuController.shared.isMenuVisible = false
         }
     }
 
     override func toggleBoldface(_ sender: Any?) {
         if let range = self.selectedTextRange {
-            self.replace(self.textRange(from: range.start, to: range.end)!, withText: "*\(self.text(in: range)!)*")
+            let startPosition = self.offset(from: self.beginningOfDocument, to: range.start)
+            if startPosition == 0 || checkCharBefore(char: self.text.substring(from: startPosition - 1, to: startPosition - 1)) {
+                self.replace(self.textRange(from: range.start, to: range.end)!, withText: "*\(self.text(in: range)!)*")
+            } else {
+                self.replace(self.textRange(from: range.start, to: range.end)!, withText: " *\(self.text(in: range)!)*")
+            }
             UIMenuController.shared.isMenuVisible = false
         }
     }
     
     override func toggleUnderline(_ sender: Any?) {
         if let range = self.selectedTextRange {
-            self.replace(self.textRange(from: range.start, to: range.end)!, withText: "^\(self.text(in: range)!)^")
+            let startPosition = self.offset(from: self.beginningOfDocument, to: range.start)
+            if startPosition == 0 || checkCharBefore(char: self.text.substring(from: startPosition - 1, to: startPosition - 1)) {
+                self.replace(self.textRange(from: range.start, to: range.end)!, withText: "^\(self.text(in: range)!)^")
+            } else {
+                self.replace(self.textRange(from: range.start, to: range.end)!, withText: " ^\(self.text(in: range)!)^")
+            }
             UIMenuController.shared.isMenuVisible = false
         }
     }
     
     override func toggleItalics(_ sender: Any?) {
         if let range = self.selectedTextRange {
-            self.replace(self.textRange(from: range.start, to: range.end)!, withText: "_\(self.text(in: range)!)_")
+            let startPosition = self.offset(from: self.beginningOfDocument, to: range.start)
+            if startPosition == 0 || checkCharBefore(char: self.text.substring(from: startPosition - 1, to: startPosition - 1)) {
+                self.replace(self.textRange(from: range.start, to: range.end)!, withText: "_\(self.text(in: range)!)_")
+            } else {
+                self.replace(self.textRange(from: range.start, to: range.end)!, withText: " _\(self.text(in: range)!)_")
+            }
             UIMenuController.shared.isMenuVisible = false
         }
     }
     
+    func checkCharBefore(char: String) -> Bool {
+        return char == " " || char == "\n"
+    }
     
 
 }

+ 27 - 4
appbuilder-ios/NexilisLite/NexilisLite/Source/View/Chat/CustomTextView.swift

@@ -21,32 +21,55 @@ class CustomTextView: UITextView {
     
     @objc func toggleStrikethrough(_ sender: Any?) {
         if let range = self.selectedTextRange {
-            self.replace(self.textRange(from: range.start, to: range.end)!, withText: "~\(self.text(in: range)!)~")
+            let startPosition = self.offset(from: self.beginningOfDocument, to: range.start)
+            if startPosition == 0 || checkCharBefore(char: self.text.substring(from: startPosition - 1, to: startPosition - 1)) {
+                self.replace(self.textRange(from: range.start, to: range.end)!, withText: "~\(self.text(in: range)!)~")
+            } else {
+                self.replace(self.textRange(from: range.start, to: range.end)!, withText: " ~\(self.text(in: range)!)~")
+            }
             UIMenuController.shared.isMenuVisible = false
         }
     }
 
     override func toggleBoldface(_ sender: Any?) {
         if let range = self.selectedTextRange {
-            self.replace(self.textRange(from: range.start, to: range.end)!, withText: "*\(self.text(in: range)!)*")
+            let startPosition = self.offset(from: self.beginningOfDocument, to: range.start)
+            if startPosition == 0 || checkCharBefore(char: self.text.substring(from: startPosition - 1, to: startPosition - 1)) {
+                self.replace(self.textRange(from: range.start, to: range.end)!, withText: "*\(self.text(in: range)!)*")
+            } else {
+                self.replace(self.textRange(from: range.start, to: range.end)!, withText: " *\(self.text(in: range)!)*")
+            }
             UIMenuController.shared.isMenuVisible = false
         }
     }
     
     override func toggleUnderline(_ sender: Any?) {
         if let range = self.selectedTextRange {
-            self.replace(self.textRange(from: range.start, to: range.end)!, withText: "^\(self.text(in: range)!)^")
+            let startPosition = self.offset(from: self.beginningOfDocument, to: range.start)
+            if startPosition == 0 || checkCharBefore(char: self.text.substring(from: startPosition - 1, to: startPosition - 1)) {
+                self.replace(self.textRange(from: range.start, to: range.end)!, withText: "^\(self.text(in: range)!)^")
+            } else {
+                self.replace(self.textRange(from: range.start, to: range.end)!, withText: " ^\(self.text(in: range)!)^")
+            }
             UIMenuController.shared.isMenuVisible = false
         }
     }
     
     override func toggleItalics(_ sender: Any?) {
         if let range = self.selectedTextRange {
-            self.replace(self.textRange(from: range.start, to: range.end)!, withText: "_\(self.text(in: range)!)_")
+            let startPosition = self.offset(from: self.beginningOfDocument, to: range.start)
+            if startPosition == 0 || checkCharBefore(char: self.text.substring(from: startPosition - 1, to: startPosition - 1)) {
+                self.replace(self.textRange(from: range.start, to: range.end)!, withText: "_\(self.text(in: range)!)_")
+            } else {
+                self.replace(self.textRange(from: range.start, to: range.end)!, withText: " _\(self.text(in: range)!)_")
+            }
             UIMenuController.shared.isMenuVisible = false
         }
     }
     
+    func checkCharBefore(char: String) -> Bool {
+        return char == " " || char == "\n"
+    }
     
 
 }