2009-08-28 18 views
212

Pracuję nad aplikacją, w której użytkownik musi napisać kilka informacji. W tym celu potrzebuję UITextField, który jest wieloliniowy (ogólnie UITextField jest pojedynczą linią).Jak utworzyć wielowierszowy UITextfield?

Jako, że szukam go w Google, znajduję w tym celu odpowiedź na temat używania UITextView zamiast UITextfield.

+1

użycie tej trzeciej klasy podmiotami zaimportować projekt Xcode i używać go, swoją pracę zbyt dobry link: https: // GitHub. com/adonoho/HPGrowingTextView –

+0

Oto mała kontrola, którą napisałem właśnie w tym celu. ma obsługę wielolinii, a także przycisk Gotowe do zamykania klawiatury. możesz go używać https://code.google.com/p/galtextfield/ –

Odpowiedz

370

UITextField specjalnie tylko jedna linia.

Twoje wyszukiwanie w Google jest poprawne, musisz użyć UITextView zamiast UITextField do wyświetlenia i edycji tekstu wielowierszowego.

W programie Interface Builder dodaj UITextView tam, gdzie chcesz i zaznacz pole "edytowalne". Domyślnie będzie to multilinia.

+6

Powiedz mi, proszę, proszę, jak natywna aplikacja Kalendarz sprawia, że ​​Widok z symbolem zastępczym i zawijaniem słów dla notatek na ekranie dodawania wydarzeń? – zest

+2

jak ustawić symbol zastępczy dla UITextView? – Mani

+4

Nie możesz dodać symbolu zastępczego do TextView, ale możesz dodać szarą etykietę nad widokiem TextView i ukryć ją, jeśli użytkownik wprowadzi jakiś tekst. –

2

Tak, UITextView jest tym, czego szukasz. Będziesz musiał poradzić sobie z niektórymi rzeczami w inny sposób (np. Klawiszem powrotu), ale możesz dodać do niego tekst, który pozwoli ci przewijać w górę iw dół, jeśli wewnątrz jest za dużo tekstu.

Ten link zawiera informacje na temat tworzenia ekranu, aby wprowadzić dane:

create a data entry screen

+0

Link działa dla mnie –

7

Oprócz zachowania wielu linii, główną różnicą między UITextView i UITextField jest to, że UITextView nie proponuje symbolu zastępczego. Aby ominąć to ograniczenie, możesz użyć UITextView z "fałszywym symbolem zastępczym".

Zobacz to pytanie SO, aby poznać szczegóły: Placeholder in UITextView.

21

Ok zrobiłem to z jakiejś sztuczki;) Po pierwsze zbudować UITextField i zwiększona jest size 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 made my UITextField i usuwać swoje background color . Teraz wygląda na to, że masz wiele linii TextField!

+1

Użyłem automatycznego układu i przypięłam wszystkie boki UITextField do UITextView. Naprawdę świetna sztuczka, dzięki! – phatmann

+0

proszę @phantmann, czy możesz pokazać nam swój kod do automatycznego układu? – Esteve

+6

Spowoduje to utworzenie "UITextView".Istotą UITextField jest to, że zachowuje się inaczej niż "UITextView". –

1

Jeśli musisz mieć UITextField z 2 liniami tekstu, jedną z opcji jest dodanie UILabel jako wyodrębnienia UITextField dla drugiego wiersza tekstu. Mam UITextField w mojej aplikacji, której użytkownicy często nie zdają sobie sprawy, że można edytować, stukając, i chciałem dodać mały tekst napisów z napisem "Stuknij, aby edytować" w 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

Uzupełnieniem odpowiedź h4xxr w powyższym łatwiejszy sposób wyregulować wysokość UITextField jest wybranie kwadratowy styl obramowania w atrybucie inspectors-> Pole tekstowe. (Domyślnie styl obramowania z UITextField jest elipsa.)

referencyjny: Odpowiedział Brian tu: How to set UITextField height?

1

użycie UITextView zamiast UITextField

9

Można fałszywe UITextField użyciu UITextView. Problemem jest utrata funkcji posiadacza miejsca.

Jeśli zdecydujesz się skorzystać z UITextView i potrzebują zastępczego, to zrobić:

W swojej viewDidLoad ustawić kolor i tekst zastępcze:

myTxtView.textColor = .lightGray 
myTxtView.text = "Type your thoughts here..." 

następnie dokonać zastępczy zniknie kiedy wasz Wybrano UITextView:

func textViewDidBeginEditing (textView: UITextView) { 
    if myTxtView.textColor.textColor == ph_TextColor && myTxtView.isFirstResponder() { 
     myTxtView.text = nil 
     myTxtView.textColor = .white 
    } 
} 

Kiedy użytkownik zakończy edycję, upewnij się, że istnieje wartość. Jeśli nie ma, dodaj zastępczy ponownie:

func textViewDidEndEditing (textView: UITextView) { 
    if myTxtView.text.isEmpty || myTxtView.text == "" { 
     myTxtView.textColor = .lightGray 
     myTxtView.text = "Type your thoughts here..." 
    } 
} 

Inne cechy konieczne może być fałszywe:

UITextField często wykorzystać każdy list, można dodać tę funkcję do UITableView:

myTxtView.autocapitalizationType = .words 

UITextField na ogół nie przewiń:

myTxtView.scrollEnabled = false 
-1

Nie ma innej opcji, że pracował dla mnie:

Podklasa UITextField i zastąpić:

- (void)drawTextInRect:(CGRect)rect 

W ten sposób można na przykład:

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

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

Ten kod uczyni tekst stosując jako wiele linii w razie potrzeby, jeśli rect ma wystarczająco dużo miejsca. Możesz określić dowolny inny atrybut w zależności od potrzeb.

nie wolno używać:

self.defaultTextAttributes 

który zmusi jeden tekst wiersza renderingu

Powiązane problemy