Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // uitextviewdelegate
- private var changedTextRange: NSRange! = nil
- private var replacementText: String! = nil
- func textViewDidChange(_ textView: UITextView) {
- UpdateTextViewSize()
- guard changedTextRange != nil, replacementText != nil else {
- return
- }
- autocomplete.didChangeText(range: changedTextRange, replacementText: replacementText)
- changedTextRange = nil
- replacementText = nil
- }
- func textViewDidChangeSelection(_ textView: UITextView) {
- if changedTextRange == nil {
- autocomplete.didChangeText(range: NSRange(location: textView.selectedRange.location, length: 0), replacementText: "")
- }
- }
- func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
- /* if invalid newstring then return before next code */
- changedTextRange = range
- replacementText = text
- return true
- }
- // autocomplete
- var validInputStarted = false
- var stringRange: Range<Int>! = nil
- func didChangeText(range: NSRange, replacementText text: String) {
- let marker = "&" //
- var autoString = ""
- if validInputStarted {
- switch stringRange.lowerBound <= range.lowerBound && range.lowerBound <= stringRange.upperBound {
- case true:
- stringRange = stringRange.lowerBound..<(stringRange.upperBound + (text.count - range.length))
- autoString = String(Array(textView.text)[stringRange])
- if autoString.range(of: "^[a-z0-9]*(\\.[a-z0-9])*$", options: .regularExpression) == nil {
- autoString = ""
- fallthrough
- }
- default:
- validInputStarted = false
- stringRange = nil
- // clear()
- // очищаешь таблицу поиска и/или уничтожаешь еще
- }
- }
- if !validInputStarted, range.lowerBound + text.count - marker.count >= 0 && text.count > 0 {
- let markerRange = Range(range.lowerBound - marker.count + text.count..<range.lowerBound + text.count)
- if String(Array(textView.text)[markerRange]) == marker {
- stringRange = markerRange.lowerBound + marker.count..<markerRange.upperBound
- validInputStarted = true
- if let str = Optional((textView.text).suffix(textView.text.count - stringRange.lowerBound)),
- let range = str.range(of: "^[a-z0-9]*(\\.[a-z0-9])*", options: .regularExpression) {
- stringRange = NSRange(
- location: stringRange.lowerBound,
- length: str.distance(from: range.lowerBound, to: range.upperBound)
- ).toRange()!
- autoString = str.substring(with: range)
- print(stringRange)
- }
- /* if (self.topConstraint?.isActive ?? true) == false { // show gui
- UIView.animate(withDuration: 0.3, animations: {
- self.topConstraint?.isActive = true
- self.layoutIfNeeded()
- })
- } */ // таблицу можешь показывать тут
- }
- }
- guard validInputStarted else {
- return
- }
- print(autoString) // готовая строка
- // делаешь запросы и отображаешь в таблице
- return;
- }
Add Comment
Please, Sign In to add comment