如何將UITextView
中的段落分隔爲完全隔離的文本聚類,例如在進行選擇時只能選擇該段落中的單詞?如何在iOS應用程序中按段落分隔選擇(中等)?
在這種情況下,你只能選擇文本「你有義務。」
I'm與選擇取消實驗時的段落外,做必要的數學定義段範圍,但到目前爲止沒有運氣。
如何將UITextView
中的段落分隔爲完全隔離的文本聚類,例如在進行選擇時只能選擇該段落中的單詞?如何在iOS應用程序中按段落分隔選擇(中等)?
在這種情況下,你只能選擇文本「你有義務。」
I'm與選擇取消實驗時的段落外,做必要的數學定義段範圍,但到目前爲止沒有運氣。
這個想法是當開始選擇文本時,從光標 位置找到當前段落的擴展名。然後僅允許該段落的範圍與對應於該選擇的範圍之間的交點 。
這是溶液作爲夫特3
class RichTextView: UITextView {...}
extension RichTextView: UITextViewDelegate {
func textViewDidChangeSelection(_ textView: UITextView) {
let range = textView.selectedRange
if range.length > 0 {
if let maxRange =
textView.attributedText.getParagraphRangeContaining(cursorPosition: range.location){
selectedRange = NSIntersectionRange(maxRange, range)
}
}
}
}
extension NSAttributedString {
func getParagraphRangeContaining(cursorPosition: Int) -> NSRange? {
let cursorPosition = cursorPosition - 1
let nsText = self.string as NSString
let textRange = NSMakeRange(0, nsText.length)
var resultRange : NSRange?
nsText.enumerateSubstrings(in: textRange, options: .byParagraphs, using: {
(substring, substringRange, _, _) in
if (NSLocationInRange(cursorPosition , substringRange)) {
resultRange = substringRange
return
}
})
return resultRange
}
}
如果我正確理解你的問題,我會嘗試創建每個段落UITextView
和正確定位他們。當用戶按下Enter鍵時(並確保在光標後面保留文本)時創建一個新的文本,並在兩個相鄰視圖的內容按下delete(光標位於第二個視圖的開頭)時創建一個新文本。
這樣一來,選擇將在每個視圖中工作,但用戶不能同時在兩個視圖中進行選擇。
我一直在考慮這種可能性,但它似乎有點矯枉過正,我想這可能是一種更簡單的方法來實現它。 –
如果您想用代碼支持您的想法,我會授予您賞金,以免它丟失。這將是偉大的 –
現在我明白了,我認爲對於大多數情況來說,其他答案是更好的答案。這個答案會給你更多的定製,但是我想另一個更好。 – Coder256
的這是一個非常廣泛的問題。 :( – Abizern
@Abizern你會建議什麼?我不知道如何使它更具體:(我只是想在我的richTextEditor上的那種功能,我不知道從哪裏開始。 –
問題,因爲我看看它,是你列出了一系列需求並尋求解決方案,更好的方法可能是將問題分解成更小的部分 – Abizern