2016-06-20 8 views
2

UITextView私はテキストの一部を選択したいと思っています。私は残念ながら、私はこのエラーを取得し、selectedTextRangeを使用しようとしている:SwiftでNSRangeを持つtextViewでテキストを選択するにはどうすればいいですか?

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

は、これは私が使用しようとしているコードです:

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

私が使用している範囲は、正規表現から来ています

EDIT:私は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

をあなたの 'regex'変数の宣言を共有してください、私はそれを追加し、あなたにビクターSiglerのありがとうございます。 – Cue

答えて

4

UITextViewに変換を行う拡張子を追加できます。代わりにselectedTextRangeを使用して行うの:

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

ですが、私はまた、別の方法を見つけました変換、あなたは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 
関連する問題