Многострочный пользовательский ввод в iOS: UITextField vs UITextView
Мне нужно показать пользователям многострочный текстовый ввод "поле" с высотой, превышающей стандартную высоту UITextField
. Какой лучший или самый правильный подход должен быть?:
- Использование
UITextField
и изменение его высоты в коде или применение определенного ограничения по высоте. - Использование редактируемого
UITextView
. Это многострочный, но по умолчанию он не имеет местозаполнителя, я предполагаю, что я должен реализовать эту функцию в коде.
Ответы
Ответ 1
UITextField
- это только одна строка.
UITextView
этого используйте UITextView
для многострочного текста.
Чтобы внедрить заполнитель в UITextView, используйте эту логику/код.
Сначала установите UITextView, чтобы он содержал текст заполнителя и установил его на светло-серый цвет, чтобы имитировать внешний вид текста заполнителя UITextField. Либо сделайте это в viewDidLoad
либо при создании текстового представления.
Для Свифта
textView.text = "Placeholder"
textView.textColor = UIColor.lightGrayColor()
Для цели-C
textView.text = @"Placeholder";
textView.textColor =[UIColor lightGrayColor];
Затем, когда пользователь начинает редактировать текстовое представление, если текстовое представление содержит местозаполнитель (т.е. Если его цвет текста светло-серый), очистите текст-заполнитель и установите цвет текста в черный для того, чтобы он соответствовал записи пользователя.
Для Свифта
func textViewDidBeginEditing(textView: UITextView) {
if textView.textColor == UIColor.lightGrayColor() {
textView.text = nil
textView.textColor = UIColor.blackColor()
}
}
Для цели-C
- (BOOL) textViewShouldBeginEditing:(UITextView *)textView
{
if (textView.textColor == [UIColor lightGrayColor]) {
textView.text = @"";
textView.textColor = [UIColor blackColor];
}
return YES;
}
Затем, когда пользователь заканчивает редактирование текстового вида, и он ушел в отставку в качестве первого ответчика, если текстовое представление пустое, сбросьте его заполнитель, повторно добавив текст-заполнитель и установив его цвет на светло-серый.
Для Свифта
func textViewDidEndEditing(textView: UITextView) {
if textView.text.isEmpty {
textView.text = "Placeholder"
textView.textColor = UIColor.lightGrayColor()
}
}
Для цели-C
- (void)textViewDidEndEditing:(UITextView *)textView{
if ([textView.text isEqualToString:@""]) {
textView.text = @"Placeholder";
textView.textColor =[UIColor lightGrayColor];
}
}
Ответ 2
Идите с опцией два, высота текстового поля не может быть изменена, и она не отображает вторую строку...
PLACEHOLDER LOGIC:
textView.text = "Placeholder"
textView.textColor = UIColor.lightGrayColor()
func textViewDidBeginEditing(textView: UITextView) {
if textView.textColor == UIColor.lightGrayColor() {
textView.text = nil
textView.textColor = UIColor.blackColor()
}
}
func textViewDidEndEditing(textView: UITextView) {
if textView.text.isEmpty {
textView.text = "Placeholder"
textView.textColor = UIColor.lightGrayColor()
}
}
Из текстового представления Placeholder Swift.
Ответ 3
Вы не можете делать многострочный текст, используя UITextField
, вы должны пойти с UITextView
и реализовать логику UITextView
.
Ответ 4
Я бы определенно пошел с UITextView
. Если вы хотите установить текст заполнителя, UITextView+Placeholder
позволяет легко установить его. Вы можете установить его, используя
pod 'UITextView+Placeholder', '~> 1.2'
в вашем файле подкачки. Теперь вы можете импортировать заголовок
#import <UITextView+Placeholder/UITextView+Placeholder.h>
который помогает легко установить местозаполнитель.
UITextView *textView = [[UITextView alloc] init];
textView.placeholder = @"How are you?";
textView.placeholderColor = [UIColor lightGrayColor]; // optional
textView.attributedPlaceholder = ... // NSAttributedString (optional)
Ответ 5
Для Swift 3
UITextView
своей природе не имеет свойства placeholder, поэтому вам нужно будет создавать и манипулировать программно, используя методы UITextViewDelegate
.
(Примечание: добавьте UITextViewDelegate
в класс и установите textView.delegate = self
.)
Сначала установите UITextView
чтобы он содержал текст заполнителя и установил его на светло-серый цвет, чтобы имитировать внешний вид UITextField
заполнителя UITextField
. Либо сделайте это в viewDidLoad
либо при создании текстового представления.
textView.text = "Placeholder"
textView.textColor = UIColor.lightGray
Затем, когда пользователь начинает редактировать текстовое представление, если текстовое представление содержит местозаполнитель (т.е. Если его цвет текста светло-серый), очистите текст-заполнитель и установите цвет текста в черный для того, чтобы он соответствовал записи пользователя.
func textViewDidBeginEditing(_ textView: UITextView) {
if textView.textColor == UIColor.lightGray {
textView.text = nil
textView.textColor = UIColor.black
}
}
Затем, когда пользователь заканчивает редактирование текстового вида, и он ушел в отставку в качестве первого ответчика, если текстовое представление пустое, сбросьте его заполнитель, повторно добавив текст-заполнитель и установив его цвет на светло-серый.
func textViewDidEndEditing(_ textView: UITextView) {
if textView.text.isEmpty {
textView.text = "Placeholder"
textView.textColor = UIColor.lightGray
}
}