UITextField - menangkap acara tombol kembali

101

Bagaimana saya bisa mendeteksi ketika pengguna menekan tombol keyboard "kembali" saat mengedit UITextField? Saya perlu melakukan ini untuk menutup keyboard saat pengguna menekan tombol "kembali".

Terima kasih.

Ilya Suzdalnitski
sumber

Jawaban:

212
- (BOOL)textFieldShouldReturn:(UITextField *)textField {
    [textField resignFirstResponder];
    return NO;
}

Jangan lupa untuk menempatkan delegasi di storyboard ...

masukkan deskripsi gambar di sini

Ilya Suzdalnitski
sumber
47
Pastikan pengontrol tampilan Anda disetel sebagai delegasi bidang teks.
zekel
1
Terima kasih. Bagi saya, saya mengatur delegasi melalui self.yourTextField.delegate = self;. Bahkan beberapa bidang teks juga berfungsi.
haxpor
@Praxiteles Ini sekarang dapat dilakukan di storyboard tanpa memerlukan delegasi, silakan periksa jawaban di bawah.
Blake Lockley
51

Delegasi tidak diperlukan, berikut satu baris:

- (void)viewDidLoad {
    [textField addTarget:textField
                  action:@selector(resignFirstResponder)
        forControlEvents:UIControlEventEditingDidEndOnExit];
}

Sayangnya Anda tidak dapat melakukan ini secara langsung di Storyboard Anda (Anda tidak dapat menghubungkan tindakan ke kontrol yang memancarkannya di Storyboard), tetapi Anda dapat melakukannya melalui tindakan perantara.

mxcl
sumber
1
Saya hanya ingin menunjukkan bahwa UIControlEventEditingDidEndOnExitacara akan dikirim hanya jika textFieldShouldReturn:metode delegasi mengembalikan YA (tanpa harus mengundurkan diri dari bidang teks).
alex-i
Anda tidak perlu menerapkan delegasi. Tetapi mungkin jika Anda melakukannya Anda harus kembali YESuntuk metode ini.
mxcl
9

SWIFT 3.0

override open func viewDidLoad() {
    super.viewDidLoad()    
    textField.addTarget(self, action: #selector(enterPressed), for: .editingDidEndOnExit)
}

di enterPressed () fungsi letakkan semua perilaku yang Anda cari

func enterPressed(){
    //do something with typed text if needed
    textField.resignFirstResponder()
}
drpawelo
sumber
8

Sekarang Anda dapat melakukan ini papan cerita menggunakan acara yang dikirim 'Did End On Exit'.

Dalam subkelas pengontrol tampilan Anda:

 @IBAction func textFieldDidEndOnExit(textField: UITextField) {
    textField.resignFirstResponder()
}

Di papan cerita Anda untuk bidang teks yang diinginkan:

masukkan deskripsi gambar di sini

Blake Lockley
sumber
Ini jawaban yang benar sekarang.
Psiloc
3

Versi Swift menggunakan UITextFieldDelegate:

func textFieldShouldReturn(_ textField: UITextField) -> Bool {
    resignFirstResponder()
    return false
}
Leo Dabus
sumber
2

Cepat 5

textField.addTarget(textField, action: #selector(resignFirstResponder), for: .editingDidEndOnExit)
Ted
sumber
-1
- (BOOL)textFieldShouldReturn:(UITextField *)txtField 
{
[txtField resignFirstResponder];
return NO;
}

Ketika tombol enter diklik maka metode delegasi ini dipanggil. Anda dapat menangkap tombol kembali dari metode delegasi ini.

Mahendra Vishwakarma
sumber