2

UITextViewテキストの一部を選択したい場所があります。を使用しようとしていますselectedTextRangeが、残念ながら次のエラーが発生します。

タイプ 'NSRange' (別名 '_NSRange') の値を予期される引数タイプ 'UITextRange' に変換できません

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

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

私が使用している範囲は、このチュートリアル1から採用した正規表現から来ています。

編集:最初の行を追加

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)
[...]
4

3 に答える 3

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)
        }
    }

使用する

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

はどこmatchRangeにありNSRangerangeUITextRange

于 2016-06-20T22:02:44.290 に答える
-1

もう少し情報を追加するために、別の方法も見つけました。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
于 2016-06-20T23:35:45.737 に答える