Saya menggunakan kode di bawah ini untuk mencoba dan meminta textField2
agar konten teks diperbarui agar cocok textField1
setiap kali pengguna mengetik textField1
.
- (BOOL) textField: (UITextField *)theTextField shouldChangeCharactersInRange: (NSRange)range replacementString: (NSString *)string {
if (theTextField == textField1){
[textField2 setText:[textField1 text]];
}
}
Namun, output yang saya amati adalah ...
textField2 adalah "12", jika textField1 adalah "123"
textField2 adalah "123", jika textField1 adalah "1234"
... ketika yang saya inginkan adalah:
textField2 adalah "123", jika textField1 adalah "123"
textField2 adalah "1234", jika textField1 adalah "1234"
Apa yang saya lakukan salah?
ios
objective-c
uitextfield
pengguna265961
sumber
sumber
Jawaban:
-shouldChangeCharactersInRange
dipanggil sebelum bidang teks benar-benar mengubah teksnya, itulah mengapa Anda mendapatkan nilai teks lama. Untuk mendapatkan teks setelah penggunaan pembaruan:sumber
[textField addTarget:self action:@selector(textFieldEditingChanged:) forControlEvents:UIControlEventEditingChanged]
sumber
Cepat 3
Berdasarkan jawaban yang diterima, berikut ini seharusnya berfungsi di Swift 3 :
Catatan
Keduanya
String
danNSString
memiliki metode yang dipanggilreplacingCharacters:inRange:withString
. Namun, seperti yang diharapkan, yang pertama mengharapkan instance dariRange
, sedangkan yang terakhir mengharapkan instanceNSRange
. ThetextField
metode delegasi menggunakanNSRange
contoh, sehingga penggunaanNSString
dalam kasus ini.sumber
replacingCharacters
seharusnyastringByReplacingCharactersInRange
Alih-alih menggunakan UITextFieldDelegate, coba gunakan acara "Mengedit Berubah" dari UITextField.
sumber
Di Swift (4), tanpa
NSString
(Swift murni):Sebagai perpanjangan:
sumber
Versi Swift untuk itu:
sumber
Ini adalah kode yang Anda butuhkan,
sumber
gunakan penjaga
sumber
Solusi saya adalah menggunakan
UITextFieldTextDidChangeNotification
.Jangan lupa menelepon
[[NSNotificationCenter defaultCenter] removeObserver:self];
didealloc
method.sumber
Jika Anda perlu mengganti teks textfield dengan ini, Anda dapat menggunakan solusi saya (Swift 3): https://gist.github.com/Blackjacx/2198d86442ec9b9b05c0801f4e392047
Setelah penggantian, Anda bisa
textField.text
mengambil teks yang telah dibuat.sumber