Я понимаю, что этот ответ опоздал, но я обнаружил, что большинство из них не работает для моего сценария. У меня есть UITextField, который я просто хочу заставить суффикс, который пользователь не может редактировать. Однако я не хочу создавать подкласс UITextView, изменять способ обработки чертежей и т. Д. Я просто хочу запретить пользователю изменять суффикс.
Во-первых, я проверяю, что суффикс установлен в текстовом поле при редактировании. Это может быть сделано любым количеством способов в зависимости от вашего сценария. Для моего, я хотел, чтобы это было там с самого начала, поэтому я просто установил текстовое свойство text field равным суффиксу при загрузке представления и сохранил длину суффикса для дальнейшего использования. Например:
- (void)viewDidLoad {
[super viewDidLoad];
myTextField.text = "suffix";
_suffixLength = myTextField.text.length;
}
Затем я использовал протокол UITextFieldDelegate , как предлагал Джош, но использовал длину строки и диапазон, чтобы ничего не редактировало суффикс:
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
// Determine starting location of the suffix in the current string
int suffixLocation = textField.text.length - _suffixLength;
// Do not allow replacing anything in/past the suffix
if (range.location + range.length > suffixLocation)
{
return NO;
}
// Continue with delegate code...
}
Это должно работать для любого значения суффикса, которое вы присваиваете текстовому полю.