Как заставить клавишу возврата на iPhone заставить клавиатуру исчезнуть? - PullRequest
108 голосов
/ 31 мая 2011

У меня есть два UITextFields (например, имя пользователя и пароль), но я не могу избавиться от клавиатуры при нажатии клавиши возврата на клавиатуре.Как я могу это сделать?

Ответы [ 14 ]

241 голосов
/ 31 мая 2011

Сначала вам необходимо соответствовать протоколу UITextFieldDelegate в заголовочном файле View / ViewController, например:

@interface YourViewController : UIViewController <UITextFieldDelegate>

Затем в вашем файле .m необходимо реализовать следующий метод протокола UITextFieldDelegate:

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

    return YES;
}

[textField resignFirstResponder]; гарантирует, что клавиатура отклонена.

Убедитесь, что вы устанавливаете ваш view / viewcontroller как делегат UITextField после того, как вы инициализируете текстовое поле в .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
19 голосов
/ 31 мая 2011

Реализуйте метод UITextFieldDelegate следующим образом:

- (BOOL)textFieldShouldReturn:(UITextField *)aTextField
{
    [aTextField resignFirstResponder];
    return YES;
}
8 голосов
/ 31 мая 2011

См. Управление клавиатурой для полного обсуждения этой темы.

6 голосов
/ 26 июня 2012

Взял у меня пару испытаний, имел ту же проблему, у меня это сработало:

Проверьте правильность написания на -

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

Я исправил мой на textField вместо textfield, заглавными буквами "F" ... и бинго !! это сработало ..

6 голосов
/ 31 мая 2011

Ваши UITextFields должны иметь объект делегата (UITextFieldDelegate).Используйте следующий код в вашем делегате, чтобы клавиатура исчезла:

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

Должно работать до сих пор ...

4 голосов
/ 31 мая 2011

Когда нажата клавиша возврата, позвоните:

[uitextfield resignFirstResponder];
3 голосов
/ 29 июля 2016

Добавьте это вместо предопределенного класса

class ViewController: UIViewController, UITextFieldDelegate {

Чтобы удалить клавиатуру при нажатии вне клавиатуры

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

и удалитьпри нажатии клавиатуры введите

добавить эту строку в viewDidLoad ()

inputField - имя используемого textField.

self.inputField.delegate = self

и добавьте эту функцию

func textFieldShouldReturn(textField: UITextField) -> Bool {        
        textField.resignFirstResponder()        
        return true        
    }
3 голосов
/ 09 октября 2014

Установите делегат UITextField на свой ViewController, добавьте выходную ссылку между владельцем файла и UITextField, затем реализуйте этот метод:

-(BOOL)textFieldShouldReturn:(UITextField *)textField 
{
   if (textField == yourTextField) 
   {
      [textField resignFirstResponder]; 
   }
   return NO;
}
3 голосов
/ 16 ноября 2013

После довольно долгого времени, выискивая что-то, что имеет смысл, это то, что я собрал, и это сработало как шарм.

.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

Надеюсь, это поможет!

2 голосов
/ 17 августа 2016

в быстром вы должны делегировать UITextfieldDelegate , важно не забывать об этом, в viewController, например:

class MyViewController: UITextfieldDelegate{

     mytextfield.delegate = self

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