Saya mencoba memeriksa ketika bidang teks berubah, juga fungsi yang digunakan untuk textView - textViewDidChange
sejauh ini saya telah melakukan ini:
func textFieldDidBeginEditing(textField: UITextField) {
if self.status.text == "" && self.username.text == "" {
self.topRightButton.enabled = false
} else {
self.topRightButton.enabled = true
}
}
Jenis pekerjaan apa, tetapi topRightButton
diaktifkan segera setelah bidang teks ditekan, saya ingin itu diaktifkan hanya ketika teks benar-benar diketikkan?
ios
swift
uitextfield
boraseoksoon
sumber
sumber
viewDidLoad
. Tindakannya adalah huruf demi huruf sama. Aplikasi mogok segera setelah tombol keyboard ditekan. Sunting: Menemukannya! Kehilangan titik koma di dalam aksinya. Saya berasumsi itu hanya harus sama dengan nama fungsi.Anda dapat membuat koneksi ini di pembuat antarmuka.
Di storyboard Anda, klik asisten editor di bagian atas layar (dua lingkaran di tengah).
Ctrl + Klik pada bidang teks di pembangun antarmuka.
Seret dari EditingChanged ke dalam kelas pengontrol tampilan Anda di tampilan asisten.
Beri nama fungsi Anda ("textDidChange" misalnya) dan klik connect.
sumber
Swift 5.0
dan menangani metode:
Cepat 4.0
dan menangani metode:
Swift 3.0
dan menangani metode:
sumber
Cara saya menanganinya sejauh ini: di
UITextFieldDelegate
Versi Swift4
sumber
Cepat 3
sumber
Swift 3.0.1+ (Beberapa jawaban swift 3.0 lainnya tidak mutakhir)
sumber
textField (_: shouldChangeCharactersIn: replacementString :) bekerja untuk saya di Xcode 8, Swift 3 jika Anda ingin memeriksa setiap penekanan tombol.
sumber
Cepat 4
Sesuai dengan UITextFieldDelegate .
sumber
Anda dapat menggunakan metode delegasi ini dari UITextFieldDelegate. Itu menyala dengan setiap perubahan karakter.
Namun KEBAKARAN HANYA INI SEBELUM perubahan dilakukan (memang, perubahan hanya dilakukan jika Anda benar dari sini).
sumber
.isEmpty
metode ini tidak sama dengan true sampai SETELAH metode ini memiliki kesempatan untuk mengembalikan true; untuk memberi tahu aplikasi bahwa bidang teks harus berubah.Mungkin menggunakan RxSwift?
perlu
tambahkan impor dengan jelas
Jadi kamu punya
textfield : UITextField
Kamu punya 3 metode lain ..
sumber
Cepat 4
Jika Anda ingin melakukan perubahan setelah pengguna mengetik sepenuhnya (Ini akan dipanggil setelah pengguna mengabaikan keyboard atau tekan enter).
sumber
sumber
Anda harus mengikuti langkah-langkah ini:
Kode sampel:
sumber
Ini adalah bagaimana Anda dapat menambahkan
textField text change listener
menggunakan Swift 3 :Deklarasikan kelas Anda sebagai
UITextFieldDelegate
Kemudian secara tradisional tambahkan fungsi textFieldShouldEndEditing:
sumber
Cepat 4.2
tulis ini di viewDidLoad
tulis viewDidLoad luar ini
Anda dapat mengubah acara dengan UIControl.Event.editingDidBegin atau apa pun yang ingin Anda deteksi.
sumber
Kalau-kalau Anda tertarik pada solusi SwiftUI, ini berfungsi untuk saya:
Saya harus mengatakan itu bukan ide saya, saya membacanya di blog ini: SwiftUI mengikat: Trik yang sangat sederhana
sumber
Jika tidak mungkin untuk mengikat addTarget ke UITextField Anda, saya menyarankan Anda untuk mengikat salah satunya seperti yang disarankan di atas, dan masukkan kode untuk dieksekusi di akhir metode shouldChangeCharactersIn.
Dan dalam panggilan shouldChangeCharactersIn func.
sumber
cepat 4
Di viewDidLoad ():
Tambahkan fungsi ini:
sumber
buat kelas kustom baru MaterialTextfield.swift
sumber
UITextField
telah memperbarui nilainya - mengapa membuat kelas yang terlalu rumit untuk menyelesaikan masalah sederhana ini?