我有一个NSRanges数组,我希望这些范围在我的UITextView中是不可变的/只读的。 但我不太清楚我应该如何限制编辑到数组中不存在的范围。
我尝试了以下内容。
func textView(textView: UITextView, shouldChangeTextInRange range: NSRange, replacementText text: String) -> Bool {
for range in immutableRange {
if changeRange.location == range.location {
return false
}
}
return true
}
但这不符合预期。 如何对此进行排序,以便仅允许用户更改数组中未包含的范围内的文本?
编辑:
我也尝试过使用以下内容:
NSLocationInRange(immutableRange.location, changeRange) && NSLocationInRange(NSMaxRange(immutableRange), changeRange)
检查changeRange是否包含immutableRange,但是也没有按预期工作。
我有以下类型的字符串:“有______红色花朵,______绿色花朵和______黄色花朵”,除了“____”之外的所有内容都是不可变的范围。
答案 0 :(得分:1)
您对每个范围的检查都不正确。您无需查看每个范围是否相等,而是需要检查每个范围是否相交:
for range in immutableRange {
var overlap = NSIntersectionRange(changeRange, range)
if overlap.length != 0 {
return false // the ranges overlap
}
}
我不熟悉Swift。上面的代码可能有语法错误。根据需要修复。
此外,这只是对您要实现的目标的部分修复。这将保护原始字符串的只读部分,但是您需要更多代码才能正确地允许用户键入未受保护的区域而不会弄乱其他所有区域。