Bagaimana cara menyembunyikan keyboard ketika saya menekan tombol kembali di UITextField?


148

Mengklik di bidang teks membuat keyboard muncul. Bagaimana cara menyembunyikannya ketika pengguna menekan tombol kembali?


13
Yang menyenangkan tentang Stack Overflow adalah bahwa pertanyaan BANYAK sudah dijawab, terutama yang sederhana. Karena itu, harap cari jawaban PERTAMA, sebelum bertanya. Lihat, itu sederhana: stackoverflow.com/search?q=iphone+hide+keyboard
Felixyz

Ini adalah subkelas dari UITextfield yang secara dinamis mengubah UIReturnKey sesuai dengan kondisi teks / string: github.com/codeinteractiveapps/OBReturnKeyTextField
CodeInteractive

Jawaban:


286

Pertama buat delegasi file Anda untuk UITextField

@interface MYLoginViewController () <UITextFieldDelegate>

@end

Kemudian tambahkan metode ini ke kode Anda.

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

Juga tambahkan self.textField.delegate = self;


1
Ingin tahu, mengapa <UITextFieldDelegate> tidak diperlukan? Biasanya Anda akan melihat peringatan dalam kasus ini.
pixelfreak

7
jika Anda membuat file Anda didelegasikan menggunakan Interface Builder maka <UITextFieldDelegate> tidak diperlukan dalam file .h ..
Saurabh

1
menambahkan <UITextFieldDelegate> dalam file .h dan mengatur delegate di viewdidload [yourTextField setDelegate: self]; akan menyelesaikannya!
Umit Kaya

@Saurabh Apa yang istimewa dari storyboard yang dibuat VC?
Paul Brewczynski

62

Dalam viewDidLoadmenyatakan:

[yourTextField setDelegate:self];

Kemudian, sertakan override metode delegate:

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

6
+1 untuk setDelegate:pengingat. Pasti sudah lupa dan kode tidak berfungsi sebelumnya.
piperchester

2
Bukankah ini seharusnya textField, bukan TextTield Anda ketika sedang dilewatkan?
Clive Jefferies

adalah cara untuk mengatakan yang menyatakan delegasi dari textField Anda
oscar castellon

1
<UITextFieldDelegate> harus dalam file .h, jika tidak, peringatan akan muncul!
Umit Kaya

22

Coba ini di Swift ,

Langkah 1: Tetapkan delegasi sebagai diri AndatextField

textField.delegate = self

Langkah 2: Tambahkan UITextFieldDelegate ini di bawah deklarasi kelas Anda,

extension YourClassName: UITextFieldDelegate {
    func textFieldShouldReturn(textField: UITextField) -> Bool {
         textField.resignFirstResponder()
        return true
    }
}

14

Dalam cepat lakukan seperti ini:
Pertama dalam ViewControllermengimplementasikan ini UITextFieldDelegate Untuk misalnya.

class MyViewController: UIViewController, UITextFieldDelegate {
....
}

Sekarang tambahkan delegasi ke TextFielddi mana Anda ingin mengabaikan keyboard ketika kembali disadap baik dalam viewDidLoadmetode seperti di bawah ini atau di mana Anda menginisialisasi itu. Untuk misalnya.

override func viewDidLoad() {

    super.viewDidLoad()   
    myTextField.delegate = self
}

Sekarang tambahkan metode ini.

func textFieldShouldReturn(textField: UITextField) -> Bool {

    textField.resignFirstResponder()
    return true
}

1
Langkah kedua tidak diperlukan jika Anda menetapkan delegasi di IB.
hris.to

Muncul (dalam versi Swift saat ini) harus ada garis bawah sebelum "textField:"
Bryce Sandlund

2

Coba ini,

[textField setDelegate: self];

Kemudian, dalam metode delegasi textField

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

itu bukan praktik terbaik untuk melakukan itu.
orafaelreis

membutuhkan UITextFieldDelegate dalam definisi antarmuka.
Alp Altunel

@AlpAltunel: Terima kasih atas komentarnya, 4 tahun yang lalu.
Vineesh TP

1

atur delegasi dari UITextField, dan over ride, textFieldShouldReturnmetode, dalam metode itu hanya menulis dua baris berikut:

[textField resignFirstResponder];
return YES;

itu dia. Sebelum menulis kode jangan lupa untuk mengatur delegasi dari UITextFielddan mengatur jenis kunci Kembali ke "Selesai" dari jendela properti. (Perintah + shift + I).


1

Anda dapat menghubungkan "Tindakan Utama Dipicu" (klik kanan pada UITextField) dengan IBAction dan Anda dapat mengundurkan diri responden pertama (tanpa delegasi). Contoh (Swift 4):

@IBAction func textFieldPrimaryAction(_ sender: UITextField) {
    sender.resignFirstResponder()
    ...
}

Cara yang disukai jika menggunakan storyboard.
lal

1

Cepat 4

Tetapkan delegasi UITextFieldin view controller field.delegate = self,, dan kemudian:

extension ViewController: UITextFieldDelegate {
    func textFieldShouldReturn(_ textField: UITextField) -> Bool {
        // don't force `endEditing` if you want to be asked for resigning
        // also return real flow value, not strict, like: true / false
        return textField.endEditing(false)
    }
}

bagaimana Anda menangani keinginan pengguna untuk 'tab' ke bidang teks berikutnya dengan menekan tombol kembali, sampai yang terakhir dan kemudian mengundurkan diri? Juga di SwiftUI.
Learn2Code

@ Learn2Code membuat manajer, mengumpulkan bidang teks dan rantai, yang terakhir akan memicu fungsi selesai.
dimpiax

1

Jika Anda ingin menyembunyikan keyboard untuk penggunaan keyboard tertentu. [self.view resignFirstResponder]; Jika Anda ingin menyembunyikan keyboard apa pun dari tampilan gunakan[self.view endEditing:true];



0

Ok, saya pikir untuk pemula hal mungkin agak membingungkan. Saya pikir jawaban yang benar adalah campuran dari semua hal di atas, setidaknya di Swift4.

Baik buat ekstensi atau gunakan ViewController di mana Anda ingin menggunakan ini tetapi pastikan untuk mengimplementasikan UITextFieldDelegate. Demi dapat digunakan kembali, saya merasa lebih mudah menggunakan ekstensi:

extension UIViewController : UITextFieldDelegate {
    ...
}

tetapi alternatifnya juga bekerja:

class MyViewController: UIViewController {
    ...
}

Tambahkan metode textFieldShouldReturn (tergantung pada opsi Anda sebelumnya, baik dalam ekstensi atau di ViewController Anda)

func textFieldShouldReturn(_ textField: UITextField) -> Bool {
    return textField.endEditing(false)
}

Dalam metode viewDidLoad Anda, setel delegasi bidang teks ke mandiri

@IBOutlet weak var myTextField: UITextField!
...

override func viewDidLoad() {
    ..
    myTextField.delegte = self;
    ..
}

Itu saja. Sekarang, ketika Anda menekan returnyang textFieldShouldReturnharus disebut.


0

Tentukan kelas ini dan kemudian setel bidang teks Anda untuk menggunakan kelas dan ini mengotomatiskan seluruh keyboard yang bersembunyi ketika kembali ditekan secara otomatis.

class TextFieldWithReturn: UITextField, UITextFieldDelegate
{

    required init?(coder aDecoder: NSCoder) 
    {
        super.init(coder: aDecoder)
        self.delegate = self
    }

    func textFieldShouldReturn(_ textField: UITextField) -> Bool
    {
        textField.resignFirstResponder()
        return true
    }

}

Maka yang perlu Anda lakukan di storyboard adalah mengatur bidang untuk menggunakan kelas:

masukkan deskripsi gambar di sini

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.