Sunt în curs de dezvoltare o aplicație în cazul în care utilizatorul trebuie să scrie niște informații. Pentru acest scop am nevoie de un UITextField
care este multi-linie (în general UITextField
este de o singură linie).
Cum am'm pe Google am găsit un răspuns de utilizare a UITextView "în loc de" UITextfield` pentru acest scop.
UITextField
este în mod special unul-line numai.
Dvs. de căutare Google este corect, aveți nevoie pentru a utiliza `UITextView "în loc de" UITextField pentru afișarea și editarea de text multilinie.
În Interface Builder, se adaugă un UITextView
în cazul în care doriți și selectați "editabile" caseta. Acesta va fi multilinie în mod implicit.
Ok am facut-o cu un truc ;) Primul construieste un UITextField și a crescut-o's "dimensiune", astfel :
CGRect frameRect = textField.frame;
frameRect.size.height = 53;
textField.frame = frameRect;
Apoi a construi un UITextView
exact în aceeași zonă în care u facut UITextField
și șterse său de fundal de culoare. Acum se pare ca u ai o mai multe linii
TextField` !
Puteți simula o UITextField folosind UITextView. Problema pe care'll au este că vă veți pierde locul de titular funcționalitate.
Dacă alegeți să utilizați un UITextView și au nevoie de substituent, face acest lucru:
În viewDidLoad seta culoarea și text substituenți:
myTxtView.textColor = .lightGray
myTxtView.text = "Type your thoughts here..."
Apoi face substituent dispar atunci când UITextView este selectat:
func textViewDidBeginEditing (textView: UITextView) {
if myTxtView.textColor.textColor == ph_TextColor && myTxtView.isFirstResponder() {
myTxtView.text = nil
myTxtView.textColor = .white
}
}
Atunci când utilizatorul termină editarea, asigura's o valoare. Dacă nu există't, se adauga substituent din nou:
func textViewDidEndEditing (textView: UITextView) {
if myTxtView.text.isEmpty || myTxtView.text == "" {
myTxtView.textColor = .lightGray
myTxtView.text = "Type your thoughts here..."
}
}
Alte caracteristici pe care le putea avea nevoie pentru fals:
UITextField's de multe ori valorifica fiecare scrisoare, puteți adăuga această caracteristică pentru a UITableView:
myTxtView.autocapitalizationType = .words
UITextField's nu't de obicei, scroll:
myTxtView.scrollEnabled = false
În afară de mai multe linii de comportament, principala diferență între UITextView și UITextField este că UITextView nu propune un înlocuitor. Pentru a ocoli această limitare, puteți utiliza un UITextView cu o "fals substituent."
Vezi asta ATÂT de întrebare pentru detalii: Substituent în UITextView.
Da, o UITextView este ceea ce ai're în căutarea pentru. Te'll au de a face cu unele lucruri diferit (cum ar fi întoarcerea cheie), dar puteți adăuga text, și vă va permite să derulați în sus și în jos, dacă nu's prea mult text în interiorul.
Această legătură are info despre a face un ecran pentru a introduce date:
Dacă trebuie să aveți o UITextField cu 2 linii de text, o opțiune este de a adăuga un UILabel ca un subview de UITextField pentru cea de-a doua linie de text. Am o UITextField în aplicația mea că utilizatorii de multe ori nu-și dau seama este editabil prin atingerea, și am vrut să adăugați unele mici subtitrare text care spune "Atingeți pentru a Edita" la 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];
Un supliment la h4xxr's a răspunde în cele de mai sus, o modalitate mai ușoară de a regla înălțimea de UITextField este să selectați pătrat stil de frontieră în atributul inspectorilor->Câmp de Text. (În mod implicit, stilul de frontieră de o UITextfield este elipsă.)
Referință: Răspuns Brian aici : https://stackoverflow.com/questions/8641557/how-set-uitextfield-height
Nu există o altă opțiune care a lucrat pentru mine:
Subclasa UITextField și suprascrie:
- (void)drawTextInRect:(CGRect)rect
În această metodă, puteți, de exemplu:
NSDictionary *attributes = @{ NSFontAttributeName : self.font,
NSForegroundColorAttributeName : self.textColor };
[self.text drawInRect:verticalAlignedRect withAttributes:attributes];
Acest cod va face textul folosind cât mai multe linii, după cum este necesar în cazul în rect are suficient spațiu. Ai putea specifica orice alt atribut în funcție de nevoile dumneavoastră.
Nu folosiți:
self.defaultTextAttributes
care va forța o singură linie de text rendering