2016-06-20 3 views
2

나는 텍스트의 일부를 선택하고 싶습니다 UITextView 있습니다. 정규식에서 오는Swift에서 NSRange가있는 textView에서 텍스트를 선택하는 방법은 무엇입니까?

mainTextField.becomeFirstResponder() 
mainTextField.selectedTextRange = mainTextField.textInRange(matchRange) // matchRange is a NSRange 

내가 사용 범위를 :

Cannot convert value of type 'NSRange' (aka '_NSRange') to expected argument type 'UITextRange'

이것은 내가 사용하려고 해요 코드는 다음과 같습니다 나는 불행하게도 나는이 오류가 발생, selectedTextRange를 사용하려고 해요

EDIT : I는 this tutorial1에서 적응되는 첫 번째 줄에 추가

if let regex = NSRegularExpression(options: searchOptions){ // refers to an installed extension convenience init 
let range = NSMakeRange(0, (mainTextField.text.characters.count)) 
let matches = regex.matchesInString(mainTextField.text, options: [], range: range) 
[...] 
+0

너무 –

+0

내가 그것을 추가, 당신은 빅터 Sigler 감사 당신의'regex' 변수의 선언을 공유하십시오입니다. – Cue

답변

4

UITextView에 변환을 추가 할 수 있습니다.

extension UITextView 
    { 
     func textRangeFromNSRange(range:NSRange) -> UITextRange? 
     { 
      let beginning = self.beginningOfDocument 
      guard let start = self.positionFromPosition(beginning, offset: range.location), end = self.positionFromPosition(start, offset: range.length) else { return nil} 

      return self.textRangeFromPosition(start, toPosition: end) 
     } 
    } 

matchRangeNSRangerange이다 사용이

if let range = mainTextView.textRangeFromNSRange(range: matchRange){ 
     mainTextField.selectedTextRange = range 
    } 

그냥 조금 더 많은 정보를 추가 할 UITextRange

0

, 나는 또한 다른 방법을 발견하는 대신 selectedTextRange를 사용하고의 변환, 당신은 selectedRange 사용할 수 있습니다.

참고 : matchRange는 NSRange

// this don't work because selectedTextRange requires an UITextRange 
textField.selectedTextRange = textField.textInRange(matchRange) // don't work 

// this works because selectedRange requires a NSRange 
textField.selectedRange = matchRange // works