Saya ingin menggunakan latar belakang khusus untuk UITextFields
. Ini berfungsi dengan baik kecuali kenyataan bahwa saya harus menggunakan UITextBorderStyleNone
untuk membuatnya terlihat cantik. Ini memaksa teks untuk tetap ke kiri tanpa bantalan.
Bisakah saya mengatur padding secara manual sehingga terlihat mirip UITextBorderStyleRoundedRect
kecuali untuk menggunakan gambar latar belakang khusus saya?
ios
uitextfield
padding
Sebastian Wramba
sumber
sumber
*paddingView
beberapa bidang teks?Saya membuat implementasi kategori ini dan menambahkannya ke bagian atas
.m
file.Didasarkan dari tautan yang disediakan Piotr Blasiak. Tampaknya lebih sederhana kemudian membuat subkelas yang sama sekali baru, dan juga lebih sederhana kemudian menambahkan tambahan
UIView
. Namun, sepertinya ada sesuatu yang hilang untuk tidak dapat mengontrol padding di dalam bidang teks.Solusi Swift 4:
sumber
Versi Swift 3 untuk Xcode> 6, di mana Anda dapat mengedit nilai inset di Interface Builder / Storyboard.
sumber
override func placeholderRectForBounds(bounds: CGRect) -> CGRect { return CGRectInset(bounds, inset, inset) }
@IBDesignable
dan@IBInspectable
lakukan, yaitu posting ini di nshipsterreturn super.textRectForBounds(CGRectInset(bounds, inset, inset))
akan menangani offset dari tampilan aksesori dengan benar.Sunting: Masih berfungsi di iOS 11.3.1
Di iOS 6
myTextField.leftView = paddingView;
menyebabkan masalahIni menyelesaikan masalah
Untuk bidang teks yang disejajarkan, gunakan
CATransform3DMakeTranslation(-5, 0, 0)
seperti yang disebutkan oleh latenitecoder dalam komentarsumber
Pendekatan yang baik untuk menambahkan padding ke UITextField adalah dengan subkelas dan menambahkan properti edgeInsets. Anda kemudian mengatur edgeInsets dan UITextField akan ditarik sesuai. Ini juga akan berfungsi dengan benar dengan set custom leftView atau rightView.
OSTextField.h
OSTextField.m
sumber
Cukup subkelas UITextField seperti ini:
Ini menambahkan lapisan horizontal 10 titik di kedua sisi.
sumber
Kode C Tujuan
MyTextField.h
MyTextField.m
sumber
Setel kelas bidang teks Anda adalah PaddingTextField dan kustomkan padding Anda seperti yang Anda inginkan
Bersenang senang lah
sumber
Berdasarkan jawaban Trout Jahat Anda mungkin ingin membuat kategori untuk membuatnya lebih mudah digunakan di beberapa aplikasi.
File tajuk:
File implementasi:
Contoh Penggunaan
Semoga ini bisa membantu kalian
Bersulang
sumber
Versi cepat:
Sehingga Anda dapat menetapkan nilai dalam IB
sumber
IBInspectable
memungkinkan Anda untuk menerapkan kode setter saat runtime, jadi cukup masukkan nomor AndaInterface Builder
dan itu akan berfungsi.Clear Button
. Tombol hapus Anda tidak akan terlihat jika menerapkan solusi ini.Anda tidak dapat mengatur padding. Alih-alih memiliki
UIView
yang memiliki gambar latar belakang Anda dan bagianUITextField
dalamnya. AturUITextField
lebarUIViewWidth-(paddingSize x 2)
dan tingginya sama dan kemudian atur pada titikpaddingSize,paddingSize
.sumber
Cukup subkelas UITextField seperti ini ( versi Swift ):
Ini menambahkan lapisan horizontal 25.0 poin di kedua sisi.
sumber
Saya didasarkan pada solusi Nate, tetapi kemudian saya menemukan bahwa ini menyebabkan masalah ketika Anda menggunakan properti leftView / rightView, jadi lebih baik tune implementasi super, karena itu akan mempertimbangkan tampilan kiri / kanan.
sumber
Versi terbaru untuk Swift 3:
sumber
Setel padding untuk UITextField dengan UITextBorderStyleNone: Swift
Berdasarkan jawaban terbanyak @Evil Trout, saya membuat metode khusus di kelas ViewController saya, seperti yang ditunjukkan di bawah ini:
Sekarang saya dapat memanggil metode itu di dalam (metode viewDidLoad) dan mengirim TextFields saya ke metode itu dan menambahkan padding untuk kanan dan kiri, dan memberikan warna teks dan latar belakang dengan menulis hanya satu baris kode, sebagai berikut:
Ini Bekerja sempurna di iOS 7! Saya tahu bahwa menambahkan terlalu banyak Tampilan mungkin membuat kelas ini sedikit lebih berat untuk dimuat. Tetapi ketika khawatir tentang kesulitan dalam solusi lain, saya menemukan diri saya lebih bias terhadap metode ini dan lebih fleksibel dengan menggunakan cara ini. ;)
Terima kasih untuk Hack "Trout Jahat"! (busur)
Saya pikir saya harus memperbarui potongan kode jawaban ini dengan Swift:
Karena Swift memungkinkan kita untuk menulis ekstensi untuk kelas yang ada, mari kita tulis dengan cara itu.
Pemakaian:
Semoga ini bisa membantu orang lain di luar sana!
Bersulang!
sumber
Inilah cara untuk mencapai ini di SWIFT
Sumber
sumber
Versi Swift 2.0:
sumber
^ saran-saran ini bagus untuk mereka yang secara terprogram membuat antarmuka.
Tetapi ada dua CARA MUDAH MUDAH bagi kita yang menggunakan pembangun antarmuka Xcode:
lebih mudah: letakkan UIImageView di belakang bidang teks
termudah: ubah gaya perbatasan pada Anda menjadi kotak hitam sederhana (pilihan kedua dari kiri), lalu tambahkan gambar Anda sebagai gambar latar. Gambar diutamakan di atas persegi, sehingga Anda masih mendapatkan bantalan yang diperlukan untuk latar belakang gambar normal, tanpa persegi benar-benar digambar.
EDIT: Anda juga dapat menggunakan bola hitam (opsi ketiga dari kiri saat memilih UITextBox di IB), itu tidak bekerja dengan gaya "Grafis bola" paling kanan.
sumber
Jika ada yang mencari
Swift 4.0
versi maka di bawahextension
ini berfungsi. Ini memiliki keduanyaLeft
danRight
padding untukUITextField
. Sebenarnya ituIBInspectable
untuk konfigurasi storyboard. Anda dapat mengatur nilai langsung dari Interface Builder / Storyboard. Ini adalah kode yang diuji dalam versi Swift 4.0 dan Xcode 9.0Perlu diingat bahwa jika Anda ingin mengaktifkan
Clear Button
yang samaUITextField
maka Anda harus membiarkan Right Padding kosong.sumber
Cara terbaik untuk melakukan ini adalah hanya membuat kelas menggunakan subclass dari UITextField dan file .m
dengan melakukan ini, pergi ke storyboard atau xib Anda dan klik inspektur identitas dan ganti UITextfield dengan "CustomTextField" Anda sendiri di opsi kelas.
Catatan: Jika Anda memberikan padding dengan tata letak otomatis untuk bidang teks maka aplikasi Anda tidak akan berjalan dan hanya menampilkan layar kosong.
sumber
Versi Swift 3:
sumber
Jawaban Nate Flink adalah favorit saya, tetapi jangan lupa tentang pandangan kanan / kiri. Misalnya untuk
UITextField
subkelas:Di atas kode set bantalan tepat untuk
rightView
dariUITextField
.sumber
Solusi Swift 3
sumber
Berikut adalah kode Swift untuk memberikan padding di UITextfield
dan panggil menggunakan
sumber
Anda bisa menggunakan kategori. atur padding ke kiri dan kanan
UITextField + Padding.h
UITextField + Padding.m
Anda dapat mengatur padding seperti self.phoneNumTF.paddingValue = 10.f; atau self.phoneNumTF.leftPadding = 10.f;
sumber
@Evil trout jawabannya bagus. Saya telah menggunakan pendekatan ini untuk beberapa waktu sekarang. Satu-satunya hal yang kurang adalah "berurusan dengan berbagai bidang teks". Saya mencoba pendekatan lain tetapi tampaknya tidak berhasil.
Subclassing UITextField hanya untuk menambahkan padding tidak masuk akal bagi saya. Jadi, saya mengulangi semua UITextFields untuk menambahkan padding.
sumber
textfieldarray
tidak didefinisikan diif
blok kedua , saya menggunakan cuplikan ini (terima kasih!) Dengan sukses setelah mengganti konten yang keduaif
denganfor(id subSubView in [view subviews]){[self addPaddingToAllTextFields:subSubView];}
Solusi Brody bekerja sempurna untuk saya. Saya harus menambahkan tampilan samping pada bidang teks dan menambahkan padding tambahan. Jadi dengan mengimplementasikan properti UIEdgeInsets kustom ke subkelas UITextField saya telah berhasil mencapai tugas. Saya akan menggunakan subkelas baru ini di semua proyek saya.
sumber
Solusi terbaik yang saya temukan sejauh ini adalah kategori. Begitulah cara saya menambahkan padding 5 poin ke kiri dan kanan:
# Pragma hanya untuk menghilangkan peringatan yang mengganggu
sumber
akan menambahkan perbatasan, yang berfungsi sebagai bantalan untuk saya.
sumber
Pertimbangan lain adalah bahwa, jika Anda memiliki lebih dari satu
UITextField
tempat Anda menambahkan padding, adalah membuat terpisahUIView
untuk setiap bidang teks - karena mereka tidak dapat dibagi.sumber