İPhone'da klavyenin kaybolmasını nasıl sağlarsınız?


108

İki tane var UITextFields(ör. Kullanıcı adı ve şifre) ancak klavyedeki dönüş tuşuna basarken klavyeden kurtulamıyorum. Bunu nasıl yapabilirim?

Yanıtlar:


242

Öncelikle UITextFieldDelegate, View / ViewController'ın başlık dosyasında şu şekilde Protokole uymanız gerekir :

@interface YourViewController : UIViewController <UITextFieldDelegate>

Daha sonra .m dosyanızda aşağıdaki UITextFieldDelegateprotokol yöntemini uygulamanız gerekir :

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

    return YES;
}

[textField resignFirstResponder]; klavyenin çıkarıldığından emin olur.

.M'deki metin alanını başlattıktan sonra görünüm / görünüm denetleyicinizi UITextField temsilcisi olarak ayarladığınızdan emin olun:

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

7
Temsilciyi ayrıca metin alanına tıklayarak, Yardımcı Programlar panelini göstererek, Bağlantı Denetçisi'ne tıklayarak, temsilci çıkışını görünüm denetleyicisine sürükleyerek film şeridinde uygulayabilirsiniz.
guptron

1
TextFieldShouldReturn yönteminiz nerede uygulanıyor? Bu sınıfı UITextField'ın temsilcisi olarak ayarlamanız gerekir. Temsilci geri araması, yalnızca temsilci olarak ayarlanan sınıftan ve sınıf bunu uyguladıysa tetiklenir.
Sid

1
MyViewController'ı başlığında UITextFieldDelegate'e uyacak şekilde ayarladınız mı?
Sid

1
MyTextField doğru şekilde tahsis edildiği ve sıfır olmadığı sürece. Teknik olarak, 's ince :) şey yapmayacağım sonra' s nil (hiçbir çökme) ama eğer
Sid

1
Ve ekleyebilirsem, UIFloatLabelTextField gibi sadece geçersiz kılınmış bir UITextField sınıfı kullanıyor olmanızın bir önemi yok , HALA yourTextField.delegate = self; !!!
Gellie Ann

19

UITextFieldDelegate yöntemini şu şekilde uygulayın:

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


6

UITextFields'ınız bir temsilci nesnesine (UITextFieldDelegate) sahip olmalıdır. Klavyenin kaybolmasını sağlamak için temsilcinizde aşağıdaki kodu kullanın:

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

Şimdiye kadar çalışmalı ...


Hey dostum, yukarıda söylediklerini yaptım ama yine de klavyenin kaybolmasını sağlayamıyorum. Hiç fikrin var mı? Teşekkürler.
K.Honda 01

Hey chris, şimdi her şey halloldu. Teşekkürler.
K.Honda 01

6

Bana birkaç deneme yaptı, aynı sorun vardı, bu benim için çalıştı:

Yazımınızı kontrol edin -

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

Benimki textFieldyerine textfield"F" harfini büyük harfle yaz ... ve bingo !! işe yaradı..


4

Dönüş tuşuna basıldığında şu numarayı arayın:

[uitextfield resignFirstResponder];

Hey Conor, uygulama, dönüş tuşuna basıldığını nasıl anlar? Teşekkürler.
K.Honda 01

3

Bir süre mantıklı olan bir şeyin peşine düştükten sonra, bunu bir araya getirdim ve büyüleyici bir şekilde çalıştı.

.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

Bu yardımcı olur umarım!


3

UITextField Temsilcisini ViewController'ınıza ayarlayın, File's Owner ile UITextField arasına bir referans çıkışı ekleyin, ardından şu yöntemi uygulayın:

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

3

Önceden tanımlanmış sınıf yerine bunu ekleyin

class ViewController: UIViewController, UITextFieldDelegate {

Klavyenin dışından tıklandığında klavyeyi çıkarmak için

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

ve basıldığında klavyeyi çıkarmak için enter

bu satırı viewDidLoad () 'a ekle

inputField, kullanılan textField'ın adıdır.

self.inputField.delegate = self

ve bu işlevi ekleyin

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

2

Swift 2:

her şeyi yapmak için yapılan bu!

Doneveya tuşuyla klavyeyi kapatın Touch outSide, Nextsonraki girişe gitmek için.

İlk Değişim TextFiled Return Keyiçin Nextfilm şeridi içinde.

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)
}

Etiketleri kullanmak Apple tarafından açıkça önerilmemektedir. Bunun yerine bir IBOutletCollection kullanabilirsiniz
Antzi

2

hızlı bir şekilde UITextfieldDelegate'i delege etmelisiniz , bunun önemli olduğunu unutmayın, viewController'da, örneğin:

class MyViewController: UITextfieldDelegate{

     mytextfield.delegate = self

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

0

UiTextField'e bir IBAction ekleyebilirsiniz (yayınlama olayı "Çıkışta Bitti" dir) ve IBAction hideKeyboard olarak adlandırılabilir,

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

ayrıca, diğer textFields veya düğmelere de uygulayabilirsiniz, örneğin, klavyeyi gizlemek için tıklattığınızda görünüme gizli bir düğme ekleyebilirsiniz.



0

Uyarı kutusu metin dosyalarına yazarken klavyenin kaybolmasını istiyorsanız

[[alertController.textFields objectAtIndex:1] resignFirstResponder];
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.