将UITextView滚动到特定文本

时间:2018-05-05 15:13:56

标签: ios swift uitextview nsattributedstring

我有一个带有大文本的uitextview,上面有一个搜索字段。搜索到的任何内容,我都希望uitextview能够滚动到特定的文本和高光。我需要确保uitextview以一种搜索文本保留在第一行的方式滚动

我使用带有某些属性的属性文本填充textview。我尝试的是获取目标文本之前的文本,并尝试获取它的大小,添加我在开头的textview文本中添加的确切属性。

使用该高度制作CGPoint并设置uitextview的contentOffset。但是textview在目标文本附近没有滚动。也许我的方法是错误的,因为我在设置属性

时没有textview的宽度

我的代码是:

func goToBla() {
        if let string = ayatTextView.text {

            if let range = string.range(of: tazweedAyahas[8].text) {
                let firstPart = string[string.startIndex..<range.lowerBound]
                print("before \(tazweedAyahas[5].text) : ")
                print(firstPart)


                if let otherStr = firstPart as? NSString {
                    let paragraphStyle = NSMutableParagraphStyle()
                    paragraphStyle.alignment = .center

                    let size = otherStr.size(withAttributes: [NSAttributedStringKey.paragraphStyle: paragraphStyle,
                                                   NSAttributedStringKey.font: UIFont(name: "me_quran", size: 30)
                        ])

                    let point = CGPoint(x: 0, y: size.height)
                    ayatTextView.setContentOffset(point, animated: true)
                }


            }
        }


    }

1 个答案:

答案 0 :(得分:3)

你的方法比它需要的要复杂得多。使用<!DOCTYPE html> <html> <body> <div class="quantity-select"> <select name="quantity" id="quantity" onchange="updateNumbers()"> <option value="2">2 BAGS, $25</option> <option value="3">3 BAGS, $35</option> <option value="4">4 BAGS, $45</option> <option value="5">5 BAGS, $55</option> </select> </div> <div class="product-info"> <table> <tr> <td><span id="total-meals">10</span> MEALS PER BAG</td> <td><span id="total-nuggs">50</span> TOTAL NUGGS</td> </tr> <tr> <td><span id="chickens-saved">1</span> CHICK SAVED</td> <td><span id="calories-saved">420</span> CALORIES SAVED</td> </tr> <tr> <td><span id="water-saved">4</span> GALLONS OF WATER SAVED</td> <td>100% MICROWAVABLE</td> </tr> </table> </div> </body> </html>的{​​{1}}方法。

scrollRangeToVisible

请注意以下事项:

  1. 在搜索时使用UITextView是否要忽略变音符号和大小写,并且您需要其他特定于区域设置的搜索功能。
  2. 如果您想要选择匹配的文字,请致电func goToBla() { if let string = ayatTextView.text, let range = string.localizedStandardRange(of: tazweedAyahas[8].text) { let viewRange = NSRange(range, in: string) ayatTextView.selectedRange = viewRange // optional ayatTextView.scrollRangeToVisible(viewRange) } }
  3. 如果您希望将所选范围放在顶部,请尝试使用此类似的内容而不是调用localizedStandardRange

    selectedRange