You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
When the user selects a line, or tries to edit/delete text, I check the current line against a rule of mine, and use the textView delegate method shouldChangeTextInRange (returning false) to ensure that specific lines of text cannot be changed by he user. However, I have run into some issues with line numbers becoming negative and/or incorrect in the process. For example, let's say I want the last 2 lines of my textview to be un-editable, I save the total number of lines, and I fetch the current line in the shouldChangeTextInRange method. If the current line is greater-than or equal to the total number of lines-1, return false. Now, this works if I select the last two lines and try to edit, it will stop me. But if I select the line above (which happens to take up 2 lines on the device) and start deleting, the line numbers become all messed up when I start to add new lines. Here is my code:
public func textView(textView: UITextView, shouldChangeTextInRange range: NSRange, replacementText text: String) -> Bool {
let myCharRange = self.textView.myLayoutManager.characterRangeForGlyphRange(range, actualGlyphRange: nil)
let myParaNumber = self.textView.myLayoutManager._paraNumberForRange(myCharRange)
let myInt = self.textView.myLastLine.integerValue
if myParaNumber+1 <= 12 || Int(myParaNumber+1) >= myInt-1 {
return false
} else {
return true
}
}
The text was updated successfully, but these errors were encountered:
Here are steps to reproduce on a simulator and device:
Simulator:
Run the example (iPhone 5s) and select the line that contains the text “on one chart"
Press enter and then use the up arrow to move the cursor up one line, you should see that the first line number is now “0”
Now select the line that contains the text “on one chart” again, and press enter and press the up arrow key, and the line numbers will now start with -1.
Device:
Run the example and select the line that contains the text “on one chart"
Press enter try to enter text
Now, tap once on the line and press “Select” from the menu that pops up, and the line numbers should now start at 0 instead of 1.
When the user selects a line, or tries to edit/delete text, I check the current line against a rule of mine, and use the textView delegate method shouldChangeTextInRange (returning false) to ensure that specific lines of text cannot be changed by he user. However, I have run into some issues with line numbers becoming negative and/or incorrect in the process. For example, let's say I want the last 2 lines of my textview to be un-editable, I save the total number of lines, and I fetch the current line in the shouldChangeTextInRange method. If the current line is greater-than or equal to the total number of lines-1, return false. Now, this works if I select the last two lines and try to edit, it will stop me. But if I select the line above (which happens to take up 2 lines on the device) and start deleting, the line numbers become all messed up when I start to add new lines. Here is my code:
The text was updated successfully, but these errors were encountered: