Как создать многострочное 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 = .words

UITextField обычно не прокручиваются:

myTxtView.scrollEnabled = false

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

см. этот вопрос SO для деталей:заполнитель в 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, чтобы выбрать квадратный стиль границы в инспекторах атрибутов - > текстовое поле. (По умолчанию стиль границы UITextfield-эллипс.)

ссылка: ответил Брайан здесь : Как установить высоту UITextField?


используйте UITextView вместо UITextField


есть еще один вариант, который работал для меня:

подкласс UITextField и перезапись:

- (void)drawTextInRect:(CGRect)rect

в этом методе вы можете, например:

    NSDictionary *attributes = @{ NSFontAttributeName : self.font,
                                  NSForegroundColorAttributeName : self.textColor };

    [self.text drawInRect:verticalAlignedRect withAttributes:attributes];

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

не использовать:

self.defaultTextAttributes

что заставит одну строку текста рендеринга