Advertisement
nubideus

Untitled

Jul 13th, 2018
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Swift 3.66 KB | None | 0 0
  1.     func didChangeText(range: NSRange, replacementText text: String) {
  2.         let marker = "@"
  3.         var str = ""
  4.         if validInputStarted {
  5.             switch (0) {
  6.             case _ where stringRange.lowerBound <= range.lowerBound && range.lowerBound <= stringRange.upperBound:
  7.                 stringRange = stringRange.lowerBound..<stringRange.upperBound + (text.count - range.length)
  8.                 str = String(Array(textView.text)[stringRange])
  9.                 fallthrough
  10.             case _ where str.range(of: "^[a-z0-9]*(\\.[a-z0-9])*$", options: .regularExpression) != nil: break
  11.             default:
  12.                 validInputStarted = false
  13.                 clear()
  14.                 return
  15.             }
  16.         }
  17.         if !validInputStarted, range.lowerBound + text.count - marker.count >= 0 && text.count > 0 {
  18.             let markerRange = Range(range.lowerBound - marker.count + text.count..<range.lowerBound + text.count)
  19.             if String(Array(textView.text)[markerRange]) == marker {
  20.                 stringRange = markerRange.lowerBound + marker.count..<markerRange.upperBound
  21.                 validInputStarted = true
  22.                
  23.                 if (self.topConstraint?.isActive ?? true) == false { // show gui
  24.                     UIView.animate(withDuration: 0.3, animations: {
  25.                         self.topConstraint?.isActive = true
  26.                         self.layoutIfNeeded()
  27.                     })
  28.                 }
  29.             }
  30.         }
  31.        
  32.         guard validInputStarted else {
  33.             return
  34.         }
  35.        
  36.         print(str) // готовая строка
  37.        
  38.         requestSessionTask?.cancel()
  39.        
  40.         let searchText = (str as String).addingPercentEncoding(withAllowedCharacters: .urlHostAllowed) ?? ""
  41.        
  42.         var closuredRequest:URLSessionTask? = nil
  43.         closuredRequest = SearchManager.getAutocompleteWithFollws(searchText, completion: {
  44.             _, result, error in
  45.             if error == nil {
  46.                 self.arItems = result
  47.                 self.tableView.reloadData()
  48.             }
  49.             if closuredRequest == self.requestSessionTask {
  50.                 self.requestSessionTask = nil
  51.             }
  52.         })
  53.        
  54.         requestSessionTask = closuredRequest
  55.     }
  56.  
  57.  
  58.     //MARK: Textview delegate
  59.     private var changedTextRange: NSRange! = nil
  60.     private var replacementText: String! = nil
  61.    
  62.     func textViewDidChange(_ textView: UITextView) {
  63.         UpdateTextViewSize()
  64.         guard changedTextRange != nil, replacementText != nil else {
  65.             return
  66.         }
  67.         autocomplete.didChangeText(range: changedTextRange, replacementText: replacementText)
  68.         changedTextRange = nil
  69.         replacementText = nil
  70.     }
  71.    
  72.     func textViewDidChangeSelection(_ textView: UITextView) {
  73.         if changedTextRange == nil {
  74.             autocomplete.didChangeText(range: textView.selectedRange, replacementText: "")
  75.         }
  76.     }
  77.    
  78.     func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
  79.         let newText = (textView.text as NSString).substring(to: range.location) + text + (textView.text as NSString).substring(from: range.location + range.length)
  80.        
  81.         if text == "\n" {
  82.             tapOK()
  83.             return false
  84.         }
  85.        
  86.         if !TextParameters.isValidLengthForFieldType(
  87.             TextFieldType.comment,
  88.             len: newText.count,
  89.             showAlert: true) {
  90.             return false
  91.         }
  92.        
  93.         changedTextRange = range
  94.         replacementText = text
  95.        
  96.         return true
  97.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement