İ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.