Bagaimana cara membuat tombol kembali di iPhone membuat keyboard hilang?

108

Saya memiliki dua UITextFields(mis. Nama pengguna dan sandi) tetapi saya tidak dapat menyingkirkan keyboard saat menekan tombol kembali pada keyboard. Bagaimana saya bisa melakukan ini?

K.Honda
sumber

Jawaban:

242

Pertama, Anda harus mengikuti UITextFieldDelegateProtokol di file header View / ViewController Anda seperti ini:

@interface YourViewController : UIViewController <UITextFieldDelegate>

Kemudian di file .m Anda, Anda perlu menerapkan UITextFieldDelegatemetode protokol berikut :

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

    return YES;
}

[textField resignFirstResponder]; pastikan keyboard ditutup.

Pastikan Anda menyetel view / viewcontroller menjadi delegasi UITextField setelah Anda memasukkan textfield di .m:

yourTextField = [[UITextField alloc] initWithFrame:yourFrame];
//....
//....
//Setting the textField's properties
//....    
//The next line is important!!
yourTextField.delegate = self; //self references the viewcontroller or view your textField is on
Sid
sumber
7
Anda juga dapat mengimplementasikan delegasi di storyboard dengan mengklik kolom teks, menampilkan panel Utilities, mengklik Connections Inspector, menyeret outlet delegasi ke pengontrol tampilan.
guptron
1
Di mana metode textFieldShouldReturn Anda diterapkan? Anda perlu menyetel kelas itu menjadi delegasi UITextField. Callback delegasi hanya akan diaktifkan dari kelas yang disetel menjadi delegasi, dan jika kelas tersebut telah mengimplementasikannya.
Sid
1
Sudahkah Anda menyetel MyViewController agar sesuai dengan UITextFieldDelegate di headernya?
Sid
1
Selama myTextField telah dialokasikan dengan benar dan tidak nihil. Secara teknis, tidak apa-apa jika nihil (tidak ada crash) tapi itu tidak akan melakukan apa-apa :)
Sid
1
Dan jika saya dapat menambahkan, tidak masalah jika Anda hanya menggunakan kelas UITextField yang ditimpa , seperti UIFloatLabelTextField, Anda MASIH PERLU yourTextField.delegate = self; !!!
Gellie Ann
19

Implementasikan metode UITextFieldDelegate seperti ini:

- (BOOL)textFieldShouldReturn:(UITextField *)aTextField
{
    [aTextField resignFirstResponder];
    return YES;
}
Nick Weaver
sumber
6

UITextFields Anda harus memiliki objek delegasi (UITextFieldDelegate). Gunakan kode berikut dalam delegasi Anda untuk menghilangkan keyboard:

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

Harus bekerja sejauh ini ...

cschwarz.dll
sumber
Hai sobat, saya telah melakukan apa yang Anda katakan di atas tetapi saya masih tidak bisa menghilangkan keyboard. Apakah Anda punya ide? Terima kasih.
K.Honda
Hei chris, semuanya sudah beres sekarang. Terima kasih.
K.Honda
6

Memberi saya beberapa percobaan, memiliki masalah yang sama, ini berhasil untuk saya:

Periksa ejaan Anda di -

(BOOL)textFieldShouldReturn:(UITextField *)textField {
    [textField resignFirstResponder];

Saya mengoreksi milik saya di textFieldbukannya textfield, capitalize "F" ... dan bingo !! berhasil ..

Ema
sumber
4

Saat tombol kembali ditekan, panggil:

[uitextfield resignFirstResponder];
Conor Taylor
sumber
Hai Conor, bagaimana aplikasi mengetahui saat tombol kembali ditekan? Terima kasih.
K.Honda
3

Setelah cukup lama mencari sesuatu yang masuk akal, inilah yang saya kumpulkan dan itu bekerja seperti pesona.

.h

//
//  ViewController.h
//  demoKeyboardScrolling
//
//  Created by Chris Cantley on 11/14/13.
//  Copyright (c) 2013 Chris Cantley. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController <UITextFieldDelegate>

// Connect your text field to this the below property.
@property (weak, nonatomic) IBOutlet UITextField *theTextField;

@end

.m

//
//  ViewController.m
//  demoKeyboardScrolling
//
//  Created by Chris Cantley on 11/14/13.
//  Copyright (c) 2013 Chris Cantley. All rights reserved.
//

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController



- (void)viewDidLoad
{
    [super viewDidLoad];
    // _theTextField is the name of the parameter designated in the .h file. 
    _theTextField.returnKeyType = UIReturnKeyDone;
    [_theTextField setDelegate:self];

}

// This part is more dynamic as it closes the keyboard regardless of what text field 
// is being used when pressing return.  
// You might want to control every single text field separately but that isn't 
// what this code do.
-(void)textFieldShouldReturn:(UITextField *)textField
{
    [textField resignFirstResponder];
}


@end

Semoga ini membantu!

pengguna2904476
sumber
3

Setel Delegasi UITextField ke ViewController Anda, tambahkan outlet referensi antara Pemilik File dan UITextField, lalu terapkan metode ini:

-(BOOL)textFieldShouldReturn:(UITextField *)textField 
{
   if (textField == yourTextField) 
   {
      [textField resignFirstResponder]; 
   }
   return NO;
}
Avinash651
sumber
3

Tambahkan ini sebagai ganti kelas yang telah ditentukan sebelumnya

class ViewController: UIViewController, UITextFieldDelegate {

Untuk menghapus keyboard saat diklik di luar keyboard

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
        self.view.endEditing(true)
    }

dan untuk melepas keyboard saat menekan enter

tambahkan baris ini di viewDidLoad ()

inputField adalah nama textField yang digunakan.

self.inputField.delegate = self

dan tambahkan fungsi ini

func textFieldShouldReturn(textField: UITextField) -> Bool {        
        textField.resignFirstResponder()        
        return true        
    }
Ali Kahoot
sumber
2

Cepat 2:

inilah yang dilakukan untuk melakukan segala sesuatu!

tutup keyboard dengan Donetombol atau Touch outSide, Nextuntuk ke masukan berikutnya.

Pertama Ubah TextFiled Return KeyKe Nextdi StoryBoard.

override func viewDidLoad() {
  txtBillIdentifier.delegate = self
  txtBillIdentifier.tag = 1
  txtPayIdentifier.delegate  = self
  txtPayIdentifier.tag  = 2

  let tap = UITapGestureRecognizer(target: self, action: "onTouchGesture")
  self.view.addGestureRecognizer(tap)

}

func textFieldShouldReturn(textField: UITextField) -> Bool {
   if(textField.returnKeyType == UIReturnKeyType.Default) {
       if let next = textField.superview?.viewWithTag(textField.tag+1) as? UITextField {
           next.becomeFirstResponder()
           return false
       }
   }
   textField.resignFirstResponder()
   return false
}

func onTouchGesture(){
    self.view.endEditing(true)
}
Mojtabye
sumber
Menggunakan tag secara eksplisit tidak disarankan oleh apple. Anda dapat menggunakan IBOutletCollection
Antzi
2

secepatnya Anda harus mendelegasikan UITextfieldDelegate , yang penting jangan lupa, di viewController, seperti:

class MyViewController: UITextfieldDelegate{

     mytextfield.delegate = self

     func textFieldShouldReturn(textField: UITextField) -> Bool {
          textField.resignFirstResponder()
     }
}
Eduardo Oliveros
sumber
0

Anda dapat menambahkan IBAction ke uiTextField (acara rilisnya adalah "Did End On Exit"), dan IBAction mungkin bernama hideKeyboard,

-(IBAction)hideKeyboard:(id)sender
{
    [uitextfield resignFirstResponder];
}

juga, Anda dapat menerapkannya ke bidang teks atau tombol lain, misalnya, Anda dapat menambahkan tombol tersembunyi ke tampilan, saat Anda mengkliknya untuk menyembunyikan keyboard.

慭 慭 流 觞
sumber
0

Jika Anda ingin menghilangkan keyboard saat menulis di kotak peringatan, textfileds

[[alertController.textFields objectAtIndex:1] resignFirstResponder];
DURGESH
sumber