Как создать многострочное UITextfield?
Я разрабатываю приложение, где пользователь должен написать некоторую информацию. Для этого мне нужен UITextField который является многострочным (в общем UITextField Это одна строка).
как я гуглю я нахожу ответ использования UITextView вместо UITextfield для этой цели.
9 ответов:
UITextFieldспециально только одна строка.ваш поиск Google является правильным, Вы должны использовать
UITextViewвместоUITextFieldдля отображения и редактирования многострочного текста.в Interface Builder добавьте
UITextViewгде вы хотите его и установите флажок "редактировать". По умолчанию он будет многострочным.
хорошо, я сделал это с некоторым трюком ;) сначала построить
UITextFieldи увеличил этоsizeтакой :CGRect frameRect = textField.frame; frameRect.size.height = 53; textField.frame = frameRect;затем построить
UITextViewточно в той же области, что вы сделали мойUITextField, и исключить егоbackground color. Теперь это выглядит так, что у вас есть несколько строкTextField!
вы можете подделать UITextField с помощью UITextView. Проблема заключается в том, что вы потеряете место функциональность.
если вы решили использовать UITextView и нужен заполнитель, сделайте это:
в вашем viewDidLoad установите цвет и текст для заполнителей:
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 = .wordsUITextField обычно не прокручивают:
myTxtView.scrollEnabled = false
кроме того, из поведения нескольких строк основное различие между UITextView и UITextField заключается в том, что UITextView не предлагает заполнитель. Чтобы обойти это ограничение, вы можете использовать UITextView с "поддельным заполнитель."
смотрите этот так вопрос для деталей:заполнитель в UITextView.
да, UITextView - это то, что вы ищете. Вам придется иметь дело с некоторыми вещами по-другому (например, с ключом возврата), но вы можете добавить к нему текст, и он позволит вам прокручивать вверх и вниз, если внутри слишком много текста.
эта ссылка содержит информацию о создании экрана для ввода данных:
Если вы должны иметь UITextField с 2 строками текста, одним из вариантов является добавление UILabel в качестве подвида UITextField для второй строки текста. У меня есть UITextField в моем приложении, которое пользователи часто не понимают, редактируется нажатием, и я хотел добавить небольшой текст субтитров, который говорит "Нажмите, чтобы изменить" в 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];
дополнение к ответу h4xxr в приведенном выше, более простой способ настроить высоту UITextField-это выбрать стиль квадратной границы в поле инспекторы атрибутов- > Text. (По умолчанию стиль границы поля UITextfield-эллипс.)
ссылка: ответил Брайан здесь : Как установить высоту UITextField?
есть еще один вариант, который работал для меня:
подкласс UITextField и перезаписать:
- (void)drawTextInRect:(CGRect)rectв этом методе вы можете, например:
NSDictionary *attributes = @{ NSFontAttributeName : self.font, NSForegroundColorAttributeName : self.textColor }; [self.text drawInRect:verticalAlignedRect withAttributes:attributes];этот код будет отображать текст, используя столько строк, сколько требуется, если прямоугольник имеет достаточно места. Вы можете указать любой другой атрибут в зависимости от ваших потребностей.
не использовать:
self.defaultTextAttributesкоторый заставит одну строку текста рендеринга