2015-10-05 67 views
0

我有一個NSRanges數組,我希望這些範圍在我的UITextView中是不可變的/只讀的。 但我不太確定如何將編輯限制在數組中不存在的範圍。在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,但如預期,要麼沒有工作。

我有以下類型的字符串:「有______紅色的花,______綠色的花和______黃色的花」,其中「____」以外的所有內容都是不可變的範圍。

+1

爲什麼範圍重疊? – rmaddy

+0

範圍不是「真實的」只是一個例子。刪除,以防止混淆。 – LucasNielsen

+0

您的'if'語句正在檢查範圍內的完全匹配。你需要看看'changeRange'和'range'是否重疊。 – rmaddy

回答

1

您對每個範圍的檢查都不正確。而不是看到如果每個範圍等於,你需要檢查,如果每個區域相交:

for range in immutableRange { 
    var overlap = NSIntersectionRange(changeRange, range) 
    if overlap.length != 0 { 
     return false // the ranges overlap 
    } 
} 

我不流利的斯威夫特。上面的代碼可能有語法錯誤。根據需要修復。

此外,這只是您嘗試實現的部分修復。這將保護原始字符串的只讀部分,但您需要更多的代碼才能正確地允許用戶鍵入未受保護的區域而不會弄亂其他所有內容。

+0

謝謝你的解決方案。 – LucasNielsen

+0

你的'if'條件應該在'overlap'上。 – Abhinav

+0

@Abhinav謝謝。這是一個錯字。固定。 – rmaddy