it-swarm.com.ru

Как создать многострочное UITextfield?

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

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

242
raaz

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

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

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

408
h4xxr

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

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

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

20
Rudi

Вы можете подделать 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
12
Dave G

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

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

7
MonsieurDart

Если у вас должен быть 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
DiscDev

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

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

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

2
nevan king

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

0
Monir Khlaf

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

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

0
Tony