iPhone: проблема с текстом по умолчанию в UITextField - PullRequest
0 голосов
/ 12 августа 2011

В моей пользовательской ячейке таблицы я хочу показать некоторый текст по умолчанию в моем UITextField, например "введите ваше имя", и когда пользователь начинает редактировать ячейку, я хочу, чтобы этот текст оставался там и не редактировался, а редактирование начинается там, гдетекст по умолчанию заканчивается.Могу ли я сделать это легко?

Я могу сделать это, поместив метку слева и текстовое поле справа, но затем мне нужно каждый раз вычислять, какой длины текст по умолчанию (который может быть разным для каждого) и пользовательский создать текстовое поле в длину, чтобы соответствовать.

Есть предложения?

Ответы [ 2 ]

1 голос
/ 12 августа 2011

Поскольку вы используете UITextField, вы можете подключиться к UITextFieldDelegate методам делегатов , чтобы проверить текст текстового поля в разных состояниях.Например, когда UITextField становится редактируемым, и всякий раз, когда текст в текстовом поле изменяется.

Вам могут быть интересны два:

- (void)textFieldDidBeginEditing:(UITextField *)textField
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string

Используя их,вы можете легко иметь свойство placeholder UITextField, содержащее любой текст, который вы хотели бы использовать, а затем, когда пользователь начинает редактировать поле, textFieldDidBeginEditing: заполнить текст текстового поля текстом-заполнителем, а затем контролировать текстдля каждого символа пользователь вводит с помощью textField:shouldChangeCharactersInRange:replacementString:, чтобы пользователь не мог вручную удалить текст заполнителя, который вы для него ввели.

1 голос
/ 12 августа 2011

У меня есть метка для расчета размера. Просто установите текст метки, затем установите размер метки и сдвиньте UITextField до самого края метки. Если в тексте метки есть пробел, он выглядит великолепно.

Примерно так:

UILabel *nameLabel = [[UILabel alloc] initWithFrame:CGRectMake(0.0, 0.0, 550.0, 28.0)];
[nameLabel setFont:[UIFont fontWithName:@"Helvetica-Bold" size:24.0]];
[nameLabel setText:@"Name: "];
[nameLabel sizeToFit];
[self addSubview:nameLabel];
[nameLabel release];
UITextField *nameTextField = [[UITextField alloc] initWithFrame:CGRectMake(nameLabel.frame.size.width + nameLabel.frame.origin.x, 0.0, 550.0 - nameLabel.frame.size.width, nameLabel.frame.size.height)];

Изменить, чтобы ответить на комментарий об особых случаях: В особых случаях, таких как очень длинные метки, вам придется добавить дополнительный код. Например, вы можете проверить ширину после вызова sizeToFit и, если она превышает определенную ширину, перестроить метку с несколькими строками, меньшим шрифтом и т. Д. К сожалению, если вам необходимо учитывать особые случаи, вам придется выполнять дополнительную работу по кодированию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...