Saya mengembangkan sebuah aplikasi di mana pengguna telah menulis beberapa informasi. Untuk tujuan ini aku butuh UITextField
yang multi-line (di umum UITextField
adalah single line).
Seperti yang saya'm Googling saya menemukan jawaban dari menggunakan UITextView
bukan UITextfield
untuk tujuan ini.
UITextField
adalah khusus satu baris saja.
Pencarian Google anda benar, anda perlu menggunakan UITextView
bukan UITextField
untuk menampilkan dan mengedit multiline text.
Di Interface Builder, tambahkan UITextView
di mana anda inginkan dan pilih "editable" kotak. Itu akan menjadi multiline secara default.
Ok saya melakukannya dengan beberapa trik ;) Pertama membangun UITextField
dan peningkatan it's ukuran
seperti ini :
CGRect frameRect = textField.frame;
frameRect.size.height = 53;
textField.frame = frameRect;
Kemudian membangun UITextView
persis di daerah yang sama yang u membuat saya UITextField
, dan dihapus dengan warna latar belakang
. Sekarang terlihat seperti bahwa anda memiliki beberapa baris TextField
!
Anda dapat palsu UITextField menggunakan UITextView. Masalah anda'll adalah bahwa anda kehilangan tempat dudukan fungsi.
Jika anda memilih untuk menggunakan UITextView dan perlu placeholder, lakukan ini:
Di viewDidLoad mengatur warna dan teks ke placeholder:
myTxtView.textColor = .lightGray
myTxtView.text = "Type your thoughts here..."
Kemudian membuat placeholder hilang ketika anda UITextView dipilih:
func textViewDidBeginEditing (textView: UITextView) {
if myTxtView.textColor.textColor == ph_TextColor && myTxtView.isFirstResponder() {
myTxtView.text = nil
myTxtView.textColor = .white
}
}
Ketika pengguna selesai mengedit, memastikan ada's nilai. Jika ada isn't, menambahkan placeholder lagi:
func textViewDidEndEditing (textView: UITextView) {
if myTxtView.text.isEmpty || myTxtView.text == "" {
myTxtView.textColor = .lightGray
myTxtView.text = "Type your thoughts here..."
}
}
Fitur lain yang anda mungkin perlu untuk palsu:
UITextField's sering memanfaatkan setiap surat, anda dapat menambahkan fitur yang UITableView untuk:
myTxtView.autocapitalizationType = .words
UITextField's don't biasanya scroll:
myTxtView.scrollEnabled = false
Selain dari beberapa baris perilaku, perbedaan utama antara UITextView dan UITextField adalah bahwa UITextView tidak mengusulkan pengganti. Untuk memotong pembatasan ini, anda dapat menggunakan UITextView dengan "palsu placeholder."
Melihat ini JADI pertanyaan untuk rincian: Placeholder dalam UITextView.
Ya, UITextView adalah apa yang anda're looking for. Anda'akan harus berurusan dengan beberapa hal yang berbeda (seperti tombol kembali) tetapi anda dapat menambahkan teks untuk itu, dan itu akan memungkinkan anda untuk menggulir ke atas dan ke bawah jika ada's terlalu banyak teks dalam.
Link ini memiliki info tentang membuat layar untuk memasukkan data:
Jika anda harus memiliki UITextField dengan 2 baris teks, salah satu pilihan adalah untuk menambahkan UILabel sebagai subview dari UITextField untuk baris kedua teks. Saya memiliki UITextField di app saya bahwa pengguna sering tidak menyadari yang dapat diedit dengan menekan, dan saya ingin menambahkan beberapa teks subtitle yang mengatakan "Ketuk untuk Mengedit" untuk 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];
Suplemen untuk h4xxr's jawaban di atas, cara yang lebih mudah untuk menyesuaikan ketinggian UITextField adalah untuk memilih meter gaya perbatasan dalam atribut inspektur->Bidang Teks. (Secara default, perbatasan gaya UITextfield adalah elips.)
Referensi: Menjawab Brian di sini : https://stackoverflow.com/questions/8641557/how-set-uitextfield-height
Ada pilihan lain yang bekerja untuk saya:
Subclass UITextField dan menimpa:
- (void)drawTextInRect:(CGRect)rect
Dalam metode ini misalnya, anda dapat:
NSDictionary *attributes = @{ NSFontAttributeName : self.font,
NSForegroundColorAttributeName : self.textColor };
[self.text drawInRect:verticalAlignedRect withAttributes:attributes];
Kode ini akan membuat teks yang menggunakan banyak garis-garis seperti yang diperlukan jika rect memiliki cukup ruang. Anda bisa menentukan atribut lainnya tergantung pada kebutuhan anda.
Jangan gunakan:
self.defaultTextAttributes
yang akan memaksa satu baris teks rendering