Как создать многострочное UITextfield? - PullRequest
244 голосов
/ 28 августа 2009

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

Поскольку я гуглю, я нахожу ответ, используя для этого UITextView вместо UITextfield.

Ответы [ 9 ]

409 голосов
/ 28 августа 2009

UITextField только одна строка.

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

В Интерфейсном Разработчике добавьте UITextView, где вы хотите, и установите флажок «редактируемый». По умолчанию будет многострочным.

20 голосов
/ 20 ноября 2012

Хорошо, я сделал это с помощью некоторого трюка;) Сначала собрал UITextField и увеличил его size следующим образом:

CGRect frameRect = textField.frame;
        frameRect.size.height = 53;
        textField.frame = frameRect;

Затем создайте UITextView точно в той же области, в которой вы сделали мой UITextField, и удалили его background color. Теперь похоже, что у вас есть несколько строк TextField!

12 голосов
/ 12 мая 2016

Вы можете подделать 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
7 голосов
/ 10 ноября 2010

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

Подробности смотрите в этом вопросе: Заполнитель в UITextView .

2 голосов
/ 02 мая 2013

Если у вас должен быть UITextField с 2 строками текста, один из вариантов - добавить 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];
2 голосов
/ 28 августа 2009

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

Эта ссылка содержит информацию о создании экрана для ввода данных:

создать экран ввода данных

0 голосов
/ 27 декабря 2016

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

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

- (void)drawTextInRect:(CGRect)rect

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

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

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

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

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

self.defaultTextAttributes

, что приведет к выводу текста в одну строку

0 голосов
/ 23 января 2016

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

0 голосов
/ 03 февраля 2014

В дополнение к ответу h4xxr выше, более простой способ отрегулировать высоту UITextField - выбрать стиль квадратной границы в атрибуте inspectors-> Text Field. (По умолчанию стиль рамки поля UIText - эллипс.)

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

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