Как создать многострочное поле UITextfield?
Я разрабатываю приложение, в котором пользователь должен написать некоторую информацию. Для этого мне нужен UITextField
, который является многострочным (в общем случае UITextField
- одна строка).
Как я ищу Google, я нашел ответ на использование UITextView
вместо UITextField
для этой цели.
Ответы
Ответ 1
UITextField
является только однострочным.
Ваш поиск Google верен, вам нужно использовать UITextView
вместо UITextField
для отображения и редактирования многострочного текста.
В Interface Builder добавьте UITextView
туда, где вы хотите, и выберите "редактируемый". По умолчанию он будет многострочным.
Ответ 2
Хорошо, я сделал это с некоторым трюком;) Сначала постройте UITextField
и увеличьте его size
следующим образом:
CGRect frameRect = textField.frame;
frameRect.size.height = 53;
textField.frame = frameRect;
Затем постройте UITextView
точно в той же области, где u сделал мой UITextField
, и удалил его background color
. Теперь это выглядит так, что u имеет несколько строк TextField
!
Ответ 3
Помимо поведения с несколькими строками, основное различие между UITextView и UITextField заключается в том, что UITextView не предлагает местозаполнитель. Чтобы обойти это ограничение, вы можете использовать UITextView с "фальшивым заполнителем".
Подробнее см. этот вопрос: Заполнитель в UITextView.
Ответ 4
Вы можете подделать UITextField с помощью UITextView. Проблема в том, что вы потеряете функциональность владельца места.
Если вы решили использовать UITextView и нуждаетесь в заполнителе, сделайте следующее:
В вашем представленииDidLoad установите цвет и текст для заполнителей:
myTxtView.textColor = .lightGray
myTxtView.text = "Type your thoughts here..."
Затем создайте местозаполнитель, если выбран ваш UITextView:
func textViewDidBeginEditing (textView: UITextView) {
if myTxtView.textColor.textColor == ph_TextColor && myTxtView.isFirstResponder() {
myTxtView.text = nil
myTxtView.textColor = .white
}
}
Когда пользователь закончит редактирование, убедитесь, что оно имеет значение. Если этого не произошло, добавьте заполнитель снова:
func textViewDidEndEditing (textView: UITextView) {
if myTxtView.text.isEmpty || myTxtView.text == "" {
myTxtView.textColor = .lightGray
myTxtView.text = "Type your thoughts here..."
}
}
Другие функции, которые могут возникнуть при подделке:
UITextField часто использует каждую букву, вы можете добавить эту функцию в UITableView:
myTxtView.autocapitalizationType = .words
UITextField обычно не прокручивается:
myTxtView.scrollEnabled = false
Ответ 5
Да, UITextView - это то, что вы ищете. Вам придется иметь дело с некоторыми вещами по-другому (например, ключ возврата), но вы можете добавить к нему текст, и он позволит вам прокручивать вверх и вниз, если внутри слишком много текста.
Эта ссылка содержит информацию о создании экрана для ввода данных:
создать экран ввода данных
Ответ 6
Если у вас должен быть UITextField с двумя строками текста, одним из вариантов является добавление UILabel в качестве поднабора UITextField для второй строки текста. У меня есть UITextField в моем приложении, которое пользователи часто не понимают, можно редактировать, нажав, и я хотел добавить небольшой текст субтитров, который говорит "Tap to Edit" в UITextField.
CGFloat tapLlblHeight = 10;
UILabel *tapEditLbl = [[UILabel alloc] initWithFrame:CGRectMake(20, textField.frame.size.height - tapLlblHeight - 2, 70, tapLlblHeight)];
tapEditLbl.backgroundColor = [UIColor clearColor];
tapEditLbl.textColor = [UIColor whiteColor];
tapEditLbl.text = @"Tap to Edit";
[textField addSubview:tapEditLbl];
Ответ 7
используйте UITextView вместо UITextField
Ответ 8
Дополнение к h4xxr отвечает выше, более простой способ настроить высоту UITextField - это выбрать стиль квадратной границы в инспекторах атрибутов- > Текстовое поле. (По умолчанию стиль границы поля UIText является эллипсом.)
Справка: Ответ Брайана здесь: Как установить высоту UITextField?
Ответ 9
Есть еще один вариант, который работал у меня:
Подкласс UITextField и перезапись:
- (void)drawTextInRect:(CGRect)rect
В этом методе вы можете, например:
NSDictionary *attributes = @{ NSFontAttributeName : self.font,
NSForegroundColorAttributeName : self.textColor };
[self.text drawInRect:verticalAlignedRect withAttributes:attributes];
Этот код будет отображать текст, используя столько строк, сколько требуется, если у прямоугольника достаточно места. Вы можете указать любой другой атрибут в зависимости от ваших потребностей.
Не использовать:
self.defaultTextAttributes
который заставит однострочный рендеринг строки