В верхней части моей головы, range.length == 0
вернет true для символа возврата, поэтому вы явно возвращаете NO
, когда пользователь нажимает клавишу backspace в полнотекстовом поле. Я бы предложил изменить первое условие следующим образом:
if ( txtField.text.length + range.length > 15 )
return ( NO );
… таким образом вы проверяете, будет ли измененная строка *1006* слишком большой, чтобы уместиться (вместо того, чтобы просто проверять отдельные размеры существующего значения и сложения), и вы не потеряете нового кода вставки в OS 3.0, который может добавлять более одного символа в текстовое поле одновременно.