如何将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