Ответ 1
Скажем, у вас есть 2 переменных экземпляра текстового поля, связанных с текстовыми полями, созданными в построителе интерфейса. Позволяет называть их myReadOnlyTextField
и myEditableTextField
. Убедитесь, что вы подключили свойство delegate
каждого текстового поля в построителе интерфейса к контроллеру представления ( "владелец файла" ) [1]. Теперь, в контроллере представления @implementation
(.m файл), используйте метод textFieldShouldBeginEditing:
и поместите в какую-то логику, чтобы определить, какое текстовое поле вы хотите разрешить редактирование и которое не разрешать редактирование; что-то вроде этого:
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField {
BOOL editable;
if (textField == myReadOnlyTextField) {
editable = NO;
} else if (textField == myEditableTextField) {
editable = YES;
} else {
// editable = YES/NO/Other Logic
}
return editable;
}
Из UITextFieldDelegate
Документация:
textFieldShouldBeginEditing:
Просит делегата начать редактирование в указанном текстовом поле.
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
Параметры
textField
- текстовое поле, для редактирования которого начать.Возвращаемое значение
YES
, если сеанс редактирования должен быть запущен; в противном случаеNO
запретить редактирование.Обсуждение
Когда пользователь выполняет действие, которое обычно инициировать сеанс редактирования, текстовое поле сначала вызывает этот метод для см., действительно ли редактирование должно продолжаться. В большинстве случаев вы просто вернет YES из этого метода, чтобы продолжить редактирование.Реализация этого метода делегатом необязательна. Если это нет, редактирование продолжается, как если бы этот метод вернул ДА.
UITextField
Документация также хорошо читается.
[1] Вы можете сделать это также программно. Вот пример:
- (void)viewDidLoad {
[super viewDidLoad];
// .....
myReadOnlyTextField.delegate = self;
myEditableTextField.delegate = self;
}