前提・実現したいこと
textViewで検索した文字列を選択したい。そのときに、検索箇所を移動したい。
実現したいことの詳細
以下のサイトを見て、textviewの検索機能を実装しました。
ttps://qiita.com/jcomeme/items/18ebe229876d15f3d7bf(文頭にhを足してください。)
ただ、検索結果が複数ある場合に、別の検索箇所に選択範囲を移す機能の実装の仕方がわかりません。stackoverflowなどで実装方法を探しましたが、見つけられませんでした。どのようにしたら別の検索箇所に移動できるか、わかる方はいませんか?
該当のソースコード
swift
1 func searchBarSearchButtonClicked(_ searchBar: UISearchBar) { 2 var resultRangeArray = [Range<String.Index>]() 3 4 let str = textView.text //本文 5 let word = searchBar.text 6 7 var nextRange = str.startIndex..<str.endIndex //文字列全体をRange<String.Index>として検索対象に設定 8 while let range = str.range(of: word, options: [.caseInsensitive], range: nextRange, locale: Locale.current) { 9 resultRangeArray.append(range) //検索結果を配列に格納 10 nextRange = range.upperBound..<str.endIndex //見つかった文字列の後から本文の最後までで検索対象を設定 11 } 12 13 let index = 0 14 let range = resultRangeArray[index] 15 16 /* range:Range<String.Index>からオフセットと長さを整数で取得 */ 17 let offset = range.lowerBound.utf16Offset(in: textView.text) 18 let length = str[range].count 19 20 /* offsetとlengthからUITextPositionを作成 */ 21 let startPosition = textView.position(from: textView.beginningOfDocument, offset: offset) 22 let endPosition = textView.position(from: textView.beginningOfDocument, offset: (offset + length)) 23 24 /* UITextPositionからUITextRangeを作成 */ 25 textRange = textView.textRange(from: startPosition!, to: endPosition!) 26 27 textView.selectedTextRange = textRange 28 textView.becomeFirstResponder() 29 textView.scrollRangeToVisible(NSMakeRange(offset, length)) 30 31 }
試したこと
ボタンを作って、indexの数を増減させたりしましたが、うまくできませんでした。
補足情報(FW/ツールのバージョンなど)
Swift
回答1件
あなたの回答
tips
プレビュー