2009-08-28 2 views
212

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

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

+1

использовать эти классы сторонних импортировать проект Xcode и использовать его, оборотный слишком хорошая ссылка: https: // GitHub. com/adonoho/HPGrowingTextView –

+0

Вот небольшой контроль, который я написал именно для этой цели. У этого есть многострочная поддержка, а также кнопка Готово для закрытия клавиатуры. не стесняйтесь использовать https://code.google.com/p/galtextfield/ –

ответ

370

UITextField специфически только одна линия.

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

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

+6

Итак, скажите, пожалуйста, как собственное приложение Calendar делает View с замещением заметок и слов для заметок на экране добавления событий? – zest

+2

Как установить заполнитель для UITextView? – Mani

+4

Вы не можете добавить placeholder в TextView, но вы можете добавить серый текст над TextView и скрыть его, если пользователь вводит какой-либо текст. –

2

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

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

create a data entry screen

+0

Ссылка работала для меня –

7

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

См. Этот вопрос для получения более подробной информации: Placeholder in UITextView.

21

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

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

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

+1

Я использовал автомат и привязал все стороны UITextField к UITextView. Очень большой трюк, спасибо! – phatmann

+0

пожалуйста @phantmann, можете ли вы показать нам свой код для автоматического макета? – Esteve

+6

Это создает 'UITextView'.Точка UITextField заключается в том, что она ведет себя иначе, чем 'UITextView'. –

1

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

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

Ссылки: Ответил Брайан здесь: How to set UITextField height?

1

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

9

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

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

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

- (void)drawTextInRect:(CGRect)rect 

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

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

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

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

Не используйте:

self.defaultTextAttributes 

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

Смежные вопросы