Jak utworzyć multiline UITextfield?
Rozwijam aplikację, w której użytkownik musi napisać kilka informacji. W tym celu potrzebuję UITextField
, która jest wielowierszowa (ogólnie UITextField
jest pojedynczą linią).
Podczas googlowania znajduję odpowiedź na użycie UITextView
zamiast UITextfield
w tym celu.
9 answers
UITextField
jest tylko jednolinijkowy.
Twoje wyszukiwanie w Google jest poprawne, musisz użyć UITextView
zamiast UITextField
do wyświetlania i edycji tekstu wielowierszowego.
W Interface Builder dodaj UITextView
tam, gdzie chcesz i wybierz pole "edytowalne". Domyślnie będzie to Wielowierszowe.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-04 14:08:41
Ok zrobiłem to jakimś trickiem ;) najpierw zbuduj UITextField
i zwiększ tosize
Tak:
CGRect frameRect = textField.frame;
frameRect.size.height = 53;
textField.frame = frameRect;
Następnie zbudować UITextView
dokładnie w tym samym obszarze, który u wykonane my UITextField
, i usunięte jego background color
. Teraz wygląda na to, że u ma wiele linii TextField
!
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-10 10:11:12
Możesz sfałszować UITextField używając UITextView. Problem, który będziesz miał polega na tym, że stracisz funkcjonalność posiadacza miejsca.
Jeśli zdecydujesz się użyć UITextView i potrzebujesz symbolu zastępczego, zrób to:
W twoim viewDidLoad Ustaw kolor i tekst na symbole zastępcze:
myTxtView.textColor = .lightGray
myTxtView.text = "Type your thoughts here..."
Następnie upewnij się, że symbol zastępczy zniknie, gdy UITextView jest zaznaczony:
func textViewDidBeginEditing (textView: UITextView) {
if myTxtView.textColor.textColor == ph_TextColor && myTxtView.isFirstResponder() {
myTxtView.text = nil
myTxtView.textColor = .white
}
}
Gdy użytkownik zakończy edycję, upewnij się, że istnieje wartość. Jeśli nie ma, Dodaj symbol zastępczy znowu:
func textViewDidEndEditing (textView: UITextView) {
if myTxtView.text.isEmpty || myTxtView.text == "" {
myTxtView.textColor = .lightGray
myTxtView.text = "Type your thoughts here..."
}
}
Inne funkcje, które mogą być potrzebne do fałszowania:
UITextField jest często wielką literą, możesz dodać tę funkcję do UITableView:
myTxtView.autocapitalizationType = .words
UITextField zwykle nie przewija:
myTxtView.scrollEnabled = false
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-21 21:49:22
Poza zachowaniem wielu linii, główną różnicą między UITextView i UITextField jest to, że UITextView nie proponuje elementu zastępczego. Aby ominąć to ograniczenie, możesz użyć UITextView z " fałszywym symbolem zastępczym."
Zobacz to pytanie po szczegóły: Placeholder w UITextView .
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:26:27
Tak, UITextView jest tym, czego szukasz. Będziesz musiał radzić sobie z niektórymi rzeczami inaczej (jak Klawisz Powrotu), ale możesz dodać do niego tekst, który pozwoli Ci przewijać w górę iw dół, jeśli w środku jest za dużo tekstu.
Ten link zawiera informacje o tworzeniu ekranu do wprowadzania danych:
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-20 07:24:38
Jeśli musisz mieć pole UITextField z 2 wierszami tekstu, jedną z opcji jest dodanie etykiety UILabel jako podglądu pola UITextField dla drugiej linii tekstu. Mam UITextField w mojej aplikacji, że użytkownicy często nie zdają sobie sprawy, jest edytowalny przez dotknięcie, i chciałem dodać kilka małych napisów tekst, który mówi "Dotknij, aby edytować" do 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];
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-02 18:35:08
Uzupełnieniem powyższej odpowiedzi h4xxr, łatwiejszym sposobem dostosowania wysokości pola UITextField jest wybranie kwadratowego stylu obramowania w polu atrybut->Text. (Domyślnie styl obramowania pola UITextfield to elipsa.)
Reference: Jak ustawić wysokość UITextField?
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:47:31
Użyj UITextView zamiast UITextField
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-23 20:39:31
Jest jeszcze jedna opcja, która zadziałała dla mnie:
Podklasa UITextField i nadpisanie:
- (void)drawTextInRect:(CGRect)rect
W tej metodzie można na przykład:
NSDictionary *attributes = @{ NSFontAttributeName : self.font,
NSForegroundColorAttributeName : self.textColor };
[self.text drawInRect:verticalAlignedRect withAttributes:attributes];
Ten kod wyrenderuje tekst z dowolną liczbą wierszy, jeśli rect ma wystarczająco dużo miejsca. Możesz określić dowolny inny atrybut w zależności od potrzeb.
Nie stosować:
self.defaultTextAttributes
Który wymusi renderowanie tekstu w jednej linii
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-27 16:35:36